【问题标题】:Reshape 1D numpy array to 3D with x,y,z ordering使用 x,y,z 排序将 1D numpy 数组重塑为 3D
【发布时间】:2016-02-10 21:29:15
【问题描述】:

假设我有一个对应于 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) 的3D 数组arr_3D(在本例中为(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 的数组执行此操作。

【问题讨论】:

    标签: python arrays numpy multidimensional-array reshape


    【解决方案1】:

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

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

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

    【讨论】:

    • 工作就像一个魅力,谢谢!我尝试了其他一些不起作用的转置,不知道为什么我没有尝试那个。
    猜你喜欢
    • 1970-01-01
    • 2020-04-22
    • 2018-03-18
    • 2022-01-21
    • 1970-01-01
    • 2021-10-25
    • 2021-02-25
    • 1970-01-01
    • 2016-06-30
    相关资源
    最近更新 更多