我正在尝试对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)
。
关于如何获得正确结果的任何想法?
答案 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的广播在我的代码中完成。