【发布时间】:2020-05-20 01:21:41
【问题描述】:
我的目标是在 2D 平面上评估一个函数,并为平面上的每个点返回一个 RGB 值,这样我的最终输出是一个嵌套数组,每个像素都有一个 [R G B]。这是我的第一次尝试:
@np.vectorize
def foo(x,y):
return [R,G,B]
x = np.linspace(-10,10)
y = np.linspace(-10,10)
xx, yy = np.meshgrid(x,y)
output_array = foo(xx,yy)
引发:
ValueError: setting an array element with a sequence.
我有点理解这个错误?我在这里发现了有关此错误的其他线程,但没有一个使用网格网格。当我用单个布尔值而不是 RGB 数组替换 foo(x,y) 的输出时,我生成了一个合理的输出,但这不是我想要的。
我目前的解决方案是:
def foo(x,y):
return [R,G,B]
a = np.linspace(-10,10)
b = np.linspace(10,10)
arr = np.zeros((10,10,3), dtype = np.uint8)
for i,x in enumerate(a):
for j,y in enumerate(b):
arr[i][j] = foo(x,y)
output_array = arr
这行得通,但速度很慢,而且看起来不像 Python。我正在创建一个数组,然后对其进行迭代,从我读过的内容来看,这是一个禁忌。我应该做网格网格以外的事情吗?我目前的解决方案是最好的解决方案吗?谢谢
【问题讨论】:
-
默认
vectorize需要一个标量,而不是一个列表。使用vectorize并不像随意阅读听起来那么容易。你看到速度免责声明了吗? -
您应该尝试使用 numpy 的矢量化函数对您的
foo函数进行编码。如果它不复杂,请尝试将其包含在您的帖子中。 -
还有related