2017-03-20 2 views
0

Ich habe einen memmap zum Lesen von Binärdaten (> 1000 Dateien von >> 1000 Datensätze jeweils)Zählen in einem numpy memmap hängt Kriterium auf zwei Felder

f = np.memmap('data.dat', dtype= myFormat, mode= 'r') 

und weiß, wie die Datensätze zählen eine Bedingung erfüllt, je auf einem einzigen Feld (mit dem Namen 'Status' in myFormat):

eval = f['Status'] & 0x20 == 0x20 
    nNotEval = np.count_nonzero(eval == False) 

ist ein weiteres Feld bedingt auf eval verwendet:

v = calibration * f['V'][eval] 

Nun, wie man zwei Bedingungen elementweise kombiniert? Die folgenden failes:

unexpected = (f['Status'] & 0x02 == 0) and (v > 15.) 

Python Demonstrationen „Der Wahrheitswert eines Arrays mit mehr als einem Element ist mehrdeutig“ und schlägt vor, „Use a.any() oder a.All()“, aber das ist nicht das, was Ich brauche für

nUnexpected = np.count_nonzero(unexpected) 

Muss ich iterieren? Wenn ja, wie ist die Syntax? Etwas wie for (a,b) in ...?

Antwort

1

Dies ist kein memmap Problem, oder sogar count_nonzero eins. Es geht um die Verbindung Boolesche Operationen ausführen:

unexpected = (f['Status'] & 0x02 == 0) and (v > 15.) 

Dies sollte besser funktionieren:

unexpected = (f['Status'] & 0x02 == 0) & (v > 15.) 

and ist ein Python-Skalar-Betrieb (Kurzschluss). Aber Ihre Ausdrücke erzeugen boolesche Arrays. Sie müssen & verwenden, um sie zu verbinden.

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() python (dupliziert?)

+0

Vielen Dank. & funktioniert bei mir. Und ich hätte SO nach der verbatim Fehlermeldung suchen sollen. – Rainald62

+0

Entschuldigung, ich akzeptierte die Antwort vor dem richtigen Testen. & hat für einen Fall funktioniert, aber jetzt bekomme ich folgende Fehlermeldung: ValueError: Operanden konnten nicht zusammen mit shapes (682,) (674,) 'ausgestrahlt werden. – Rainald62

+0

682 ist das 'len' von' f ['Status'] & 0x02 == 0', von 'eval' und von' f ['V'] '. Die Länge wird in der Operation "f ['V'] [eval]" zu 674. – Rainald62

Verwandte Themen