gpt4 book ai didi

python - 使用 x,y,z 排序将 1D numpy 数组 reshape 为 3D

转载 作者:行者123 更新时间:2023-12-04 00:39:46 25 4
gpt4 key购买 nike

假设我有一个对应于 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 的数组执行此操作。

最佳答案

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

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

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

关于python - 使用 x,y,z 排序将 1D numpy 数组 reshape 为 3D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33622617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com