我正在尝试使用 numpy 绘制一些复杂的函数。一些工作代码的示例:
import numpy as np
from PIL import Image
size = 1000
w = np.linspace(-10, 10, size)
x, y = np.meshgrid(w, w)
r = x + 1j*y
def f(q):
return np.angle(q)
z = f(r)
normalized = ((255/(np.amax(z) - np.amin(z)))*(z+abs(np.amin(z)))).astype(int)
data = [i for j in normalized for i in j]
img = Image.new('L', (size, size))
img.putdata(data[::-1]) #pixels are done bottom to top
img.show()
但是,假设我希望函数 f 在其中进行简单的比较,如下所示:
def f(q):
if np.abs(q) < 4:
return 1
else:
return 0
我得到错误
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
对于 np.abs(q) < 4 检查。
我做了一些挖掘并意识到这是因为 Python 正在对整个 r 数组进行操作,它无法将数组与整数进行比较。因此,我尝试寻找进行元素比较的方法。
这个页面看起来很有希望:它说我可以使用 np.less(a, b) 进行元素比较,所以我尝试了
def f(q):
if np.less(np.abs(q), 4):
return 1
else:
return 0
并得到相同的ValueError。似乎 np.less() 的两个参数都需要是相同大小的数组。
我想要的是将数组的每个元素与单个非数组数量进行比较。我想我可以制作一个相同大小的虚拟数组,其中填充相同的 4,但必须有一种更优雅的方式来做到这一点。