タイムステップ 1 から M までの N 個の粒子の 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
各粒子がnumpy配列の異なる(M x ndim)「スライス」になるように、配列を3D形式に変換したいと思います。現在、次のことを行っています。
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