我被要求使用带有 np.meshgrid 和 np.angle() 的网格 (100,100) 制作下面的图像,我唯一的问题是当我想制作最终的 bool 网格时,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")
请您参考如下方法:
几个问题:
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) 使用和/或代替&/|
2) >=类运算符相对于&/|的优先级。将 () 放在前者周围。
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)) ...
