Seite 1 von 1

bool maske

Verfasst: Montag 10. August 2020, 11:55
von Lou Cyphr3
Hallo,

ich versuche gerade ein Programm zu schreiben, was mir den Tagespreis für eine Übernachtung in einem Hotel berechnet.
Die Kosten pro Nacht sind abhängig von der Anzahl der Personen die übernachten.

Die Rechnung ist einfach : Bsp. Die Nacht kostet Konstant 100 €, wenn am Montag 8 Personen übernachten beläuft sich der Preis für jede übernachtende Person auf 12,5€ am Ende wird für jede Person die Kosten zusammen gerecht und der Preis für jede individuelle Person wird ausgegeben.

Jetzt hatte ich das Designproblem mit der Variable der Anzahl der Personen/pro Nacht.

Ich habe mir überlegt eine Art bool Maske zu schreiben und am Ende jeden Tages die Anzahl der "true" zusammen zu zählen um so die Anzahl der Übernachtungen ermittel zu können und später damit weiter zurechnen.

Die Frage ist, wie rechne ich diese Werte zusammen? Ist das überhaupt eine gute Idee oder gibt es einfachere Wege?

Ich habe eine Möglichkeit im Netz gefunden, dies mit Numpy zutun hier als beispiel mit Integern größer als 42 :

Code: Alles auswählen

B = np.array([[42, 56, 89, 65],
              [99, 88, 42, 12],
              [55, 42, 17, 18]])
print(B >= 42)
Die frage ist, wie lese ich für jede Spalte nun die Anzahl an trues aus?

Kann jemand helfen?
Danke

Re: bool maske

Verfasst: Montag 10. August 2020, 12:10
von __blackjack__
@Lou Cyphr3: `bool`-Werte kann man auch als die Zahlen 1 und 0 betrachten. Du willst auf dem `bool`-Array die `sum()`-Methode verwenden.

Re: bool maske

Verfasst: Montag 10. August 2020, 13:45
von Lou Cyphr3
@__blackjack__

okay. also so in etwa um die erste spalte auszulesen?

Code: Alles auswählen

B = np.array([[42, 56, 89, 65],
              [99, 88, 42, 12],
              [55, 42, 17, 18]])
print(B >= 42)

anzahl = sum(B[0], B[4], B[8])
kommt nicht wenn ich bool werte summiere auch nur wieder ein bool zurück?
kanns gerade nicht kompilieren, bin nicht zu hause

Re: bool maske

Verfasst: Montag 10. August 2020, 13:56
von __blackjack__
@Lou Cyphr3: Die `sum()`-*Methode* auf dem `bool`-Array, *nicht* die eingebaute `sum()`-Funktion. Und die Argumente von der musst Du Dir auch anschauen.

Re: bool maske

Verfasst: Montag 10. August 2020, 14:07
von Lou Cyphr3
okay danke @__blackjack__
also np.sum()

folgefrage: wenn ich die ergebnisse in ein dictionary verbunden mit dem jeweiligen wochentag schreiben möchte, wie sollte ich das am besten anstellen?

Re: bool maske

Verfasst: Montag 10. August 2020, 15:47
von Lou Cyphr3
ich habe jetzt die nonzero methode gefunden, wo ich dachte sie gibt mir die anzahl an nonzeros zurück.
kann mir wer sagen wie ich die ausgabe stattdessen lesen muss, weil ich es gerade nicht checke. auch ein blick in die doku hat mich eher verwirrrt.

Code: Alles auswählen

import numpy as np

B = np.array([[42, 12 ],
              [99, 27 ],
              [55, 32 ]])
print(B >= 42)

print(np.nonzero(B >= 42))

Code: Alles auswählen

[[ True False]
 [ True False]
 [ True False]]
(array([0, 1, 2]), array([0, 0, 0]))

Re: bool maske

Verfasst: Montag 10. August 2020, 15:59
von Sirius3
Nein, Du brauchst wie __blackjack__ schon geschrieben hatte die sum-Methode.

Re: bool maske

Verfasst: Montag 10. August 2020, 16:38
von Lou Cyphr3
ah sehr gut, ich habs gefunden danke nochmal für den tipp, auch wenns eine weile gedauert hat.

Code: Alles auswählen

sum_2 = np.array([[1, 2],
                  [1, 2 ],
                  [1, 2 ]])

print((sum_2.sum(axis=0)))

Code: Alles auswählen

[3 6]