使用python中的矢量化用MxNx3数组做代数?

时间:2015-05-22 16:09:09

标签: arrays vector scipy vectorization linear-algebra

假设我有一个MxNx3数组A,其中前两个索引引用一个点的坐标,最后一个索引(数字' 3')指向量的三个分量。例如A [4,7,:] = [1,2,3]表示点(7,4)处的矢量是(1,2,3)。

现在我需要实现以下操作:

Lx = D*ux - (x-xo)  
Ly = D*uy + (y-yo)  
Lz = D  

其中D,ux,uy,xo,yo都是已知的常数。 Lx,Ly和Lz是每个点(x,y)处向量的三个分量(注意:x是列索引,y是行索引)。最大的问题是关于x-xo和y-yo,因为x和y对于不同的点是不同的。那么如何使用矢量化代码或其他一些快速方法有效地为MxNx3阵列执行这些操作呢?

感谢

2 个答案:

答案 0 :(得分:2)

您可以使用numpy中的meshgrid函数:

import numpy as np
M=10
N=10
D=1
ux=0.5
uy=0.5
xo=1
yo=1
A=np.empty((M,N,3))
x=range(M)
y=range(N)
xv, yv = np.meshgrid(x, y, sparse=False, indexing='ij')
A[:,:,0]=D*ux - (xv-xo)
A[:,:,1]=D*uy - (yv-yo) 
A[:,:,2]=D

答案 1 :(得分:1)

如果你想对X和Y值进行操作,你应该将它们包含在矩阵(或其他矩阵)中,而不是依赖于它们的索引。

为此,你可以使用Numpy中的一些range creation routines,特别是numpy.mgrid