bool maske

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Lou Cyphr3
User
Beiträge: 59
Registriert: Donnerstag 6. Juli 2017, 00:04

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
Cours, camarade, le vieux monde est derrière toi!
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Lou Cyphr3: `bool`-Werte kann man auch als die Zahlen 1 und 0 betrachten. Du willst auf dem `bool`-Array die `sum()`-Methode verwenden.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Lou Cyphr3
User
Beiträge: 59
Registriert: Donnerstag 6. Juli 2017, 00:04

@__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
Cours, camarade, le vieux monde est derrière toi!
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Lou Cyphr3: Die `sum()`-*Methode* auf dem `bool`-Array, *nicht* die eingebaute `sum()`-Funktion. Und die Argumente von der musst Du Dir auch anschauen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Lou Cyphr3
User
Beiträge: 59
Registriert: Donnerstag 6. Juli 2017, 00:04

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?
Cours, camarade, le vieux monde est derrière toi!
Lou Cyphr3
User
Beiträge: 59
Registriert: Donnerstag 6. Juli 2017, 00:04

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]))
Cours, camarade, le vieux monde est derrière toi!
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Nein, Du brauchst wie __blackjack__ schon geschrieben hatte die sum-Methode.
Lou Cyphr3
User
Beiträge: 59
Registriert: Donnerstag 6. Juli 2017, 00:04

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]
Cours, camarade, le vieux monde est derrière toi!
Antworten