[英]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.