我有一个相当简单的数学运算,我想在数组上执行。让我写出这个例子:
A = numpy.ndarray((255, 255, 3), dtype=numpy.single)
# ..
for i in range(A.shape[0]):
for j in range(A.shape[1]):
x = simple_func1(i)
y = simple_func2(j)
A[i, j] = (alpha * x * y + beta * x**2 + gamma * y**2, 1, 0)
所以基本上,(i,j)和该值的3个值之间存在映射(这是用于可视化)。 我想把它卷起来以某种方式对此进行矢量化,但我不确定如何或如果可以的话。感谢。
答案 0 :(得分:3)
这是矢量化版本:
i = arange(255)
j = arange(255)
x = simple_func1(i)
y = simple_func2(j)
y = y.reshape(-1,1)
A = alpha * x * y + beta * x**2 + gamma * y**2 # broadcasting is your friend here
如果要用1和0填充最后一个坐标:
B = empty(A.shape+(3,))
B[:,:,0] = A
B[:,:,1] = 1 # broadcasting again
B[:,:,2] = 0
答案 1 :(得分:1)
您必须更改simple_funcN,以便将数组作为输入,并将数组创建为输出。之后,您可以查看numpy.meshgrid()或the cartesian() function here来构建坐标数组。之后,您应该能够使用坐标数组用一行填充A。