簡體   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