1

grid_z0次元が(たとえば)50x25x36の3dマトリックスがあります。このマトリックスの各ポイントはセルを表します。この行列をサイズ 50x25x36 の 1D 配列に変換したいと思います。また、セルの中心の座標を示す同じサイズの 3 つの配列を作成したいと思います。配列cxで、セルの中心の座標を一方向に格納しますcycz

この例は機能しますが、特に大規模なデータセットの場合はかなり遅くなります。速くする方法はありますか?

data={"x":[],"y":[],"z":[],"rho":[]}

for i in arange(0,50):
  for j in arange(0,25):
    for k in arange(0,36):
      data["x"].append(cx[i])
      data["y"].append(cy[j])
      data["z"].append(cz[k])
      data["f"].append(grid_z0[i][j][k])
4

2 に答える 2

3

NumPyの使用を検討する必要があります。

>>> import numpy as np
>>> a = np.random.rand(50,25,36) # Create a fake array
>>> print a.shape
(50, 25, 36)
>>> a.shape = -1 # Flatten the array in place
>>> print a.shape
(45000,)

配列をフラット化するときは、次と同等のことをしています:

>>> b = []
>>> for i in range(a.shape[0]):
...     for j in range(a.shape[1]):
...         for k in range(a.shape[2]):
...             b.append(a[i,j,k])

つまり、最後の軸が最初に解析され、次に 2 番目、次に最初の軸が解析されます。

長さの 3 つの 1D リストcxcyが与えられた場合、次のように 2D 配列を作成できます。czN

>>> centers = np.array([cx,cy,cz])
>>> print centers.shape
(3, N)
于 2012-09-17T09:25:54.440 に答える
2

行列/配列操作にはNumpyを使用します。

# convert to 1D array :
grid_1d = np.asarray(grid_z0).ravel()

2 番目の質問では、3D メッシュグリッドが必要です。例については、こちらを参照してください: 3D の Numpy meshgrid

于 2012-09-17T09:28:13.780 に答える