我有一个三维的位置向量数组 p [np.shape(p) 得到 (Nx, Ny, Nz, 3)],以及一个旋转矩阵的 n 数组 Rn [np.shape(R) 得到 (n, 3, 3)]。
我想获得一个形状为 (n, Nx, Ny, Nz, 3) 的数组 PR,其中第 i 个 (0 < i < n) 在第 0 维上的条目是由数组 Rn 中索引为 i 的 3x3 旋转矩阵对位置向量数组 p 进行旋转后得到的三维数组。
theta = np.arange(0, 2*np.pi, np.pi/50)
phi = np.arange(0, np.pi, np.pi/100)
a = np.arange(100)
b = np.arange(50)
p = np.array(np.meshgrid(a, b, a, indexing="xy"))
p = np.moveaxis(p, 1, 2)
p = np.moveaxis(p, 0, 3)
# np.shape(p) => (100,50,100,3)
Rn = np.array([np.array([np.cos(theta)*np.cos(phi), np.cos(theta)*np.sin(phi), -np.sin(theta)]),
np.array([-np.sin(phi), np.cos(phi), np.zeros(np.shape(phi))]),
np.array([np.cos(phi)*np.sin(theta), np.sin(theta)*np.sin(phi), np.cos(theta)])])
Rn = np.moveaxis(Rn , 1, 2)
Rn = np.moveaxis(Rn , 0, 1)
# np.shape(Rn) => (100, 3, 3)
到目前为止,我尝试了以下操作,但都没有成功。
PR= np.matmul(Rn, p)
这个操作最高效的方法是什么?我知道可以使用For循环来执行此操作,但为了提高效率,我一直在尝试在numpy中保持向量化。