Python 使用x、y、z顺序将1D numpy阵列重塑为3D
假设我有一个1D值数组,对应于x、y和z值,如下所示:Python 使用x、y、z顺序将1D numpy阵列重塑为3D,python,arrays,numpy,multidimensional-array,reshape,Python,Arrays,Numpy,Multidimensional Array,Reshape,假设我有一个1D值数组,对应于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\u 1D放入一个3D数组arr\u 3D,形状(nx,ny,nz)(在这种情况下(2,3,4))。我希望使用arr\u 3D[x\u index,y\u index,z\u index]
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\u 1D
放入一个3D数组arr\u 3D
,形状(nx,ny,nz)
(在这种情况下(2,3,4)
)。我希望使用arr\u 3D[x\u index,y\u index,z\u index]
可以引用这些值,例如,arr\u 3D[1,2,0]=5
。使用numpy.reformate(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
做这件事的最具python风格和/或最快速的方式是什么?我通常希望对长度约为100000的数组执行此操作。您可以选择非常接近的位置,但由于您希望x轴是迭代速度最快的一个,因此需要使用
arr_3d = arr_1d.reshape((4,3,2)).transpose()
因此,您创建了一个元素顺序正确但维度顺序错误的数组,然后您更正了维度顺序。非常有效,谢谢!我尝试了一些其他的转置方法,但没有成功,不知道为什么我没有尝试那个方法。