繁体   English   中英

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

[英]Fast math operations on an array in python

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

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

这是矢量化版本:

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

您必须更改simple_funcN,以便将数组作为输入,并将数组创建为输出。 之后,你可以在这里查看numpy.meshgrid()或cartesian()函数来构建坐标数组。 之后,您应该能够使用坐标数组来填充A单线。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM