繁体   English   中英

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

[英]Reshape 1D numpy array to 3D with x,y,z ordering

假设我有一个与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放入形状为(nx,ny,nz) (在这种情况下为(2,3,4) )的3D数组arr_3D 我想使用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的数组进行此操作。

您真正靠近的地方,但是由于您希望x轴成为经过最快迭代的轴,因此您需要使用类似

arr_3d = arr_1d.reshape((4,3,2)).transpose()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM