2012-03-30 18 views
-1

Ich habe einen Teil eines Codes, der zählt, was sich in den X-, Y- und Z-Spalten eines Datensatzes für einen bestimmten Bereich befindet. Ich möchte nur die Werte in x, y und z zählen. Grundsätzlich versuche ich, dass der Code die Anzahl der Werte in einer 3D-Box zählt. Wie kann ich Folgendes ändern, um dies zu tun? Vielen Dank im VorausElemente in einer Box zählen

Sx = ((min <= X) & (X <= max)).sum() #count what is in x range 
Sy = ((min <= Y) & (Y <= max)).sum() #count what is in y range 
Sz = ((min <= Z) & (Z <= max)).sum() #count what is in z range 
+3

Doy Sie alle diese Bedingungen gleichzeitig zu halten? Just '&' sie zusammen. –

+0

@Sieben es so einfach? Vielen Dank! – Surfcast23

+1

Während es für boolesche Operationen passieren wird, meinen Sie eigentlich ein logisches 'und' hier, nicht ein bitweises '&'. –

Antwort

2

Immer noch nicht sicher, ob dies wirklich das, was Sie wollen, aber trotzdem:

count = ((min < X) & (X < max) & 
     (min < Y) & (Y < max) & 
     (min < Z) & (Z < max)).sum() 
+0

Hallo Sven, wenn ich '&' sie zusammen scheint es, als ob die 'sum()' Funktion zählt die Anzahl der Zeit, die es einen gemeinsamen Wert in x, y und z gibt. Wie kann ich die Werte zählen? zum Beispiel sag ich die min auf 1 und die max auf 2 und habe dann '[0 0 0], [1 1 2] und [2 1 2]' summe gibt mir 2, aber was ich suche ist 6. Gibt es einen Weg, das zu tun? Kannst du mich auch auf ein gutes Tutorial zu solchen Sachen hinweisen? – Surfcast23

+0

Ich habe keine Ahnung, wie das zu '6' führen soll (der obige Code würde übrigens' 0' ergeben). Suchen Sie die Summe von 'Sx',' Sy' und 'Sz' aus Ihrer Frage? Wenn ja, füge sie einfach hinzu. –

+0

Ich entschuldige mich für meine schlechte Schreibweise Ich dachte in Bezug auf eine Matrix, wo "[0 0 0]" war die erste Zeile. Was ich meinte war, wenn wir drei Felder 'X = [0 1 2], Y = [0 1 1] und Z = [0 2 2] 'hätten, gäbe es sechs Werte im Bereich von größer als oder gleich 1 und und weniger als oder gleich 2. Es scheint mir, dass das, was die Summenfunktion macht, zählt die Sätze, wo X, Y und Z in diesem Bereich sind, der in diesem Fall 2 ist. – Surfcast23

2

Eine Möglichkeit ist, & alle drei Bedingungen zusammen.

Alternativ kann, da min und max gleich für alle drei Dimensionen sind, könnten Sie np.minimum() und np.maximum() wie so verwenden:

((min < np.minimum(X, Y, Z)) & (np.maximum(X, Y, Z) < max)).sum() 

P. S. Ich empfehle, min und max etwas anderes zu rufen, damit sie thebuiltins nicht beschatten.

+0

Danke Aix Ich werde das ändern – Surfcast23

Verwandte Themen