假设我有一个MxNx3数组A,其中前两个索引指的是坐标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, y, xo, yo都是已知的常数。Lx, Ly, Lz是向量在每一点(x,y)处的三个分量(注:x分别为列索引,y分别为行索引)。最大的问题是关于x-xo和y-yo,因为x和y对于不同的点是不同的。那么,如何使用向量化代码或其他一些快速方法高效地对MxNx3数组执行这些操作呢?
谢谢
您可以使用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
如果您想操作X和Y值,您应该将它们包含在矩阵(或其他矩阵)中,而不是依赖于它们的索引。
为此,您可以使用Numpy中的一些范围创建例程,特别是numpy.mgrid
。