我有一个数据数组,其中包含N个粒子的ndim坐标,时间步长为1到M.数组中的列通常表示每个粒子'p'的(x,y,z)和阵列中的每一行代表另一时间点“T”:2D到3D numpy阵列的高效转换
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格式,使得每个颗粒在不同的(m×NDIM)“片段”的numpy数组。我目前做如下:
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
谢谢!这正是我所寻找的,并让我有机会探索重塑和rollaxis方法。 – cytochrome 2012-08-08 15:59:46