При запуске следующего кода я получаю сообщение об ошибке «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()
не исправить проблему, и что я могу сделать, чтобы исправить это?
Спасибо.
Благодарим за это @brittUWaterloo, но выход является только одним булевым значением, когда я его использую. Мне нужны истинные значения для absX и absy, которые соответствуют критериям, а false для остальных. В результате я должен получить несколько ложных и истинных значений для всех 1024 элементов. [Мне нужны эти несколько false/true, поэтому я могу позже установить ориентацию элементов, которые соответствуют критериям патча. –
Если вам просто нужны значения, попробуйте использовать список, например '[x for x в absX, если x> = x_rand и x
brittAnderson