我被要求使用带有np.meshgrid和np.angle()的网格(100,100)制作图像的图形,我唯一的问题是当我想制作最终的布尔网格时,python说:ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()。
from PIL import Image
import numpy as np
XX = np.arange(0,101)
YY = np.arange(0,101)
x, y = np.meshgrid(XX, YY)
x = x-50
y = y-50
z = x+ y*-1j
print z
a = np.angle(z,deg=True)
grid = (a>=0 and a<20) or (a>=40 and a<60) or (a>=80 and a<100) or (a>=120 and a<140) or++ (a<=-20 and a>-40) or (a<=-60 and a>-80) or (a<=-100 and a>-120) or (a<=-140 and a>-160)
grid = grid.astype('uint8') * 255
new_img = Image.fromarray(grid ,'L')
new_img.save("grid .bmp")
答案 0 :(得分:4)
有几个问题:
1)当给我们一条错误信息时,你应该指出它引用的代码行。
2)这是SO问题中最常见的错误消息之一(与Python和numpy相关)。
我的猜测是错误发生在:
grid = (a>=0 and a<20) or (a>=40 and a<60) or (a>=80 and a<100) or (a>=120 and a<140) or++ (a<=-20 and a>-40) or (a<=-60 and a>-80) or (a<=-100 and a>-120) or (a<=-140 and a>-160)
是由两件事造成的
1)使用and/or
代替&/|
2)>=
种运算符相对于&amp; / |的优先级。把()
放在前者周围。
In [168]: a=np.arange(10)
In [169]: (a>=0 and a<20) or (a>=40 and a<60) or (a>=80 and a<100)
...
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
In [171]: ((a>=0) & (a<20)) | ((a>=40) & (a<60)) | ((a>=80) & (a<100))
Out[171]: array([ True, True, True, True, True, True, True, True, True, True], dtype=bool)
所以正确的表达是
((a>=0) & (a<20)) | ((a>=40) & (a<60)) | ((a>=80) & (a<100)) ...
答案 1 :(得分:1)
分别针对&
和|
尝试*
和+
或and
和or
。
&#34;和&#34;和&#34;或&#34;比较整个对象的整体真实性,但是你想要元素和...的类比。还有numpy函数logical_and
和logical_or
更明确。