我知道多维numpy数组可以与其他数组一起索引,但是我没有弄清楚以下是如何工作的:
我想要一个3d numpy数组raster中的项,它基于一个3d索引数组indx

raster=np.random.rand(5,10,50)
indx=np.random.randint(0, high=50, size=(5,10,3))

我想要的是另一个维度为indx的数组,它根据raster的索引保存indx的值。

最佳答案

我们需要两个数组ab来正确解析广播期间的索引,以便raster[a[i,j,k],b[i,j,k],indx[i,j,k]]raster[i,j,indx[i,j,k]]轴的相应范围内为ijk
最简单的解决方案是:

x,y,z = indx.shape
a,b,_ = np.ogrid[:x,:y,:z]
raster[a,b,indx]

其中indx创建三个具有形状np.ogrid[...](x,1,1)(1,y,1)的数组。我们不需要最后一个,所以把它扔掉。现在,当另外两个被(1,1,z)广播时,它们的行为正是我们所需要的。

关于python - 索引多维数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31962683/

10-10 02:34