2016-07-25 4 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() и .all(), но появляется такое же сообщение об ошибке.

Я не могу использовать np.logical_and или np.logical_or, так как я не работаю с массивом numpy.

Кто-нибудь знает, почему .any() и .all() не исправить проблему, и что я могу сделать, чтобы исправить это?

Спасибо.

ответ

1

Я думаю, что ваша проблема в том, что absX имеет кучу чисел, а x_rand + width - только один. Ваш x_rand < = absX возвращает массив. Примените np.all (или любой) к этому, а затем тест против x_rand + width, например. np.all(x_rand <= absX) < x_rand+width.

+0

Благодарим за это @brittUWaterloo, но выход является только одним булевым значением, когда я его использую. Мне нужны истинные значения для absX и absy, которые соответствуют критериям, а false для остальных. В результате я должен получить несколько ложных и истинных значений для всех 1024 элементов. [Мне нужны эти несколько false/true, поэтому я могу позже установить ориентацию элементов, которые соответствуют критериям патча. –

+0

Если вам просто нужны значения, попробуйте использовать список, например '[x for x в absX, если x> = x_rand и x brittAnderson

Смежные вопросы

 Смежные вопросы