2016-07-25 2 views
0

다음 코드를 실행하면 오류 메시지가 나타납니다. "에 ValueError : 두 개 이상의 요소를 배열의 진리 값이 모호 a.any() 또는 a.all()를 사용합니다."부울 표현식이 "ValueError : 둘 이상의 요소가있는 배열의 진리 값이 모호합니다 .A.any() 또는 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 

문제는 부울 식에 의한 것 같다 :

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

오류 메시지에서 알 수 있듯이 .any() 및을 사용해 보았습니다.,하지만 같은 오류 메시지가 나타납니다.

numpy 배열로 작업하지 않으므로 np.logical_and 또는 np.logical_or을 사용할 수 없습니다.

아무도 이유가 무엇인지 알고 있습니까? .any().all()이 문제를 해결하지 못하고 해결하기 위해 무엇을 할 수 있습니까?

감사합니다.

답변

1

당신의 문제는 absX에는 숫자가 있고 x_rand + width는 하나라는 것입니다. 귀하의 x_rand < = absX는 배열을 반환합니다. np.all (또는 any)을 적용한 다음 x_rand + width에 대한 테스트를합니다. np.all(x_rand <= absX) < x_rand+width.

+0

@brittUWaterloo 주셔서 감사하지만 출력은 단 하나의 부울 값입니다. 내가 필요한 것은 absX에 대한 참값이고 absY는 조건에 맞는 값이고, 나머지는 false입니다. 결과적으로 모든 1024 요소에 대해 여러 개의 거짓 값과 참 값을 가져야합니다. [나는 여러개의 false/true를 필요로하므로 나중에 패치 기준에 맞는 요소의 방향을 설정할 수 있습니다. –

+0

값을 원한다면 'x> = x_rand 및 x brittAnderson

관련 문제