我有一个数据数组,其中包含 N 个粒子在时间步长 1 到 M 上的 ndim 坐标。数组中的列通常代表每个粒子“p”的 (x,y,z),数组中的每一行代表另一个时间点' t':
x_t1p1 y_t1p1 z_t1p1 x_t1p2 y_t1p2 z_t1p2 ... x_t1pN y_t1pN z_t1pN
x_t2p1 y_t2p1 z_t2p1 x_t2p2 y_t2p2 z_t2p2 ... x_t2pN y_t2pN z_t2pN
...
x_tMp1 y_tMp1 z_tMp1 x_tMp2 y_tMp2 z_t1p2 ... x_tMpN y_tMpN z_tMpN
我想将数组转换为 3D 格式,以便每个粒子位于 numpy 数组的不同(M x ndim)“切片”中。我目前正在执行以下操作:
import numpy as np
def datarray_to_3D(data, ndim=3):
(nr,nc) = data.shape
nparticles = nc/ndim
dat_3D = np.zeros([nr,ndim,nparticles])
for i in range(nparticles):
dat_3D[:,:,i] = data[:,i*ndim:(i+1)*ndim]
return dat_3D
我有 NumPy 的基本知识,但想提高我对数组操作的熟练程度。如何重写上述函数以消除循环并使用更“NumPythonic”的结构?
谢谢你。
-C