使用numpy进行多维索引的最佳方法是什么?

时间:2015-12-03 15:56:58

标签: python arrays numpy multidimensional-array indexing

我正在尝试对3D numpy数组进行一些索引。 基本上我有一个数组phi,其形状为(F,A,D);例如(5, 3, 7)。生成,例如如下:

F=5; A=3; D=7; phi = np.random.random((F,A,D))

我的目标是能够使用A等二维数组对D[[0,1,2],[5,5,6]]进行索引,这意味着在第三维中将值索引为0, A中的第一个位置,第三个维度中的值为A的第二个位置的索引,依此类推。结果的形状应为(F,A,2)(F,2,A)

这相当于手动循环"索引器数组的所有值"如:

phi[:,0,0]; phi[:,1,1]; phi[:,2,2]
phi[:,0,5]; phi[:,1,5]; phi[:,2,6]

直觉上我会做phi[:,:,[[0,1,2],[3,3,3]]]之类的事情,但它的形状最终会成为(5, 3, 2, 3)

关于如何获得正确结果的任何想法?

1 个答案:

答案 0 :(得分:2)

我认为这就是你想要的

phi[:,range(A),[[0,1,2],[5,5,6]]]

您的尝试

phi[:,:,[[0,1,2],[5,5,6]]]

为前两个维度的每个值获取第三维度的值,因此最终形状为(5,3,2,3)

但是,根据您的示例,您希望第二维度不断增加,这可以通过range(A)和numpy的广播在我的代码中完成。