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

时间:2015-11-10 03:56:51

标签: 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

我想将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。使用numpy.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

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

1 个答案:

答案 0 :(得分:4)

你真正关闭的地方,但是因为你想让x轴成为最快的迭代,你需要使用像

这样的东西
arr_3d = arr_1d.reshape((4,3,2)).transpose()

因此,您创建的数组具有正确的元素顺序,但维度的顺序错误,然后您更正尺寸的顺序。