在 python 中使用矢量化对 MxNx3 数组进行代数运算?
doing algebra with an MxNx3 array using vectorization in python?
假设我有一个 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 数组执行这些操作呢?
谢谢
如果要对 X 和 Y 值进行操作,应将它们包含在矩阵(或其他矩阵)中,而不是依赖于它们的索引。
为此,您可以使用 Numpy 中的一些 range creation routines,特别是 numpy.mgrid
。
您可以使用 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
假设我有一个 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 数组执行这些操作呢?
谢谢
如果要对 X 和 Y 值进行操作,应将它们包含在矩阵(或其他矩阵)中,而不是依赖于它们的索引。
为此,您可以使用 Numpy 中的一些 range creation routines,特别是 numpy.mgrid
。
您可以使用 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