我有一個數據數組,其中包含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