python中对数组的快速数学运算

时间:2010-04-09 19:12:19

标签: python numpy

我有一个相当简单的数学运算,我想在数组上执行。让我写出这个例子:

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个值之间存在映射(这是用于可视化)。 我想把它卷起来以某种方式对此进行矢量化,但我不确定如何或如果可以的话。感谢。

2 个答案:

答案 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。