使用 x、y、z 排序将 1D numpy 数组重塑为 3D

Ben*_*say 3 python arrays numpy multidimensional-array reshape

假设我有一个与 x、y 和 z 值对应的一维值数组,如下所示:

x  y  z  arr_1D
0  0  0  0
1  0  0  1
0  1  0  2
1  1  0  3
0  2  0  4
1  2  0  5
0  0  1  6
...
0  2  3  22
1  2  3  23
Run Code Online (Sandbox Code Playgroud)

我想arr_1D进入一个arr_3D具有形状的 3D 数组(nx,ny,nz)(在这种情况下(2,3,4))。我希望使用 可以引用这些值arr_3D[x_index, y_index, z_index],例如,arr_3D[1,2,0]=5. Usingnumpy.reshape(arr_1D, (2,3,4))给了我一个正确尺寸的 3D 矩阵,但没有按照我想要的方式排序。我知道我可以使用以下代码,但我想知道是否有办法避免笨重的嵌套 for 循环。

arr_1d = np.arange(24)
nx = 2
ny = 3
nz = 4
arr_3d = np.empty((nx,ny,nz))
count = 0
for k in range(nz):
    for j in range(ny):
        for i in range(nx):
            arr_3d[i,j,k] = arr_1d[count]
            count += 1

print arr_3d[1,2,0]

output: 5
Run Code Online (Sandbox Code Playgroud)

什么是最pythonic和/或最快的方法来做到这一点?我通常希望对长度为 100,000 的数组执行此操作。

asi*_*eau 7

你真的很接近,但由于你希望 x 轴是最快迭代的轴,你需要使用类似的东西

arr_3d = arr_1d.reshape((4,3,2)).transpose()
Run Code Online (Sandbox Code Playgroud)

因此,您创建了一个元素顺序正确但维度顺序错误的数组,然后更正了维度的顺序。