Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用x、y、z顺序将1D numpy阵列重塑为3D_Python_Arrays_Numpy_Multidimensional Array_Reshape - Fatal编程技术网

Python 使用x、y、z顺序将1D numpy阵列重塑为3D

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]

假设我有一个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]
可以引用这些值,例如,
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()

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

非常有效,谢谢!我尝试了一些其他的转置方法,但没有成功,不知道为什么我没有尝试那个方法。