2016-07-25 18 views
0

Beim Ausführen des folgenden Codes erhalte ich die Fehlermeldung „Valueerror: der Wahrheitswert eines Arrays mit mehr als einem Element ist mehrdeutig Verwenden a.any() oder a.All().“Boolescher Ausdruck erzeugt einen "ValueError: Der Wahrheitswert eines Arrays mit mehr als einem Element ist mehrdeutig. Verwenden Sie a.any() oder a.all()"

import random 
import numpy as np 

nx, ny = (32, 32) 
xaxis = np.linspace(-310, 310, nx) 
yaxis = np.linspace(-310, 310, ny) 
xys = np.dstack(np.meshgrid(xaxis, yaxis)).reshape(-1, 2) 

oris = random.randint (0, 180) 
random_ori=oris 

absX = abs(xys[:,0]) 
absY = abs(xys[:,1]) 

x_rand=(random.randint (0, 220)) 
y_rand=(random.randint (0, 220)) 

width=40 
height=80 

patch = (x_rand <= absX < x_rand + width) * (y_rand <= absY < y_rand + height) 
oris[patch] = random_ori + 30 

Das Problem scheint aufgrund der boolesche Ausdruck zu sein:

patch = (x_rand <= absX < x_rand + width) * (y_rand <= absY < y_rand + height) 

Wie die Fehlermeldung suggeriert, habe ich versucht mit .any() und .all(), aber die gleiche Fehlermeldung erscheint.

Ich kann np.logical_and oder np.logical_or entweder nicht verwenden, da ich nicht mit einem numpy Array arbeite.

Würde jemand wissen, warum .any() und .all() das Problem nicht beheben, und was kann ich tun, um es zu beheben?

Danke.

Antwort

1

Ich denke, dein Problem ist, dass absX hat eine Reihe von Zahlen und x_rand + Breite ist nur eins. Ihr x_rand < = AbsX gibt ein Array zurück. Wenden Sie np.all (oder irgendeinen) darauf an, und dann den Test gegen x_rand + width, z. np.all(x_rand <= absX) < x_rand+width.

+0

Danke für das @ BrittUWaterloo, aber die Ausgabe ist nur ein einziger boolescher Wert, wenn ich das benutze. Was ich brauche, sind wahre Werte für absX und absY, die den Kriterien entsprechen und für den Rest falsch sind. Als Ergebnis sollte ich mehrere falsche und wahre Werte für alle 1024 Elemente erhalten. [Ich brauche diese Mehrfache falsch/wahr, damit ich später die Ausrichtung der Elemente festlegen kann, die zu den Patch-Kriterien passen. –

+0

Wenn Sie nur die Werte wollen, versuchen Sie ein Listenverständnis wie '[x für x in absX, wenn x> = x_rand und x brittAnderson