NumPy中如何将一个数组作为多维索引查询另一数组的值
NumPy 多维按行索引实现方法
你需要使用 NumPy 的高级索引机制,把索引数组G按列拆分,分别对应gamma的三个维度传入即可。
最简实现
直接按列切分G作为各维度的索引:
>>> gamma[G[:,0], G[:,1], G[:,2]] array([16, 14])
通用写法(适配任意维度)
如果目标数组维度和G的列数一致,不需要手动逐列切片,直接转置G后转元组传入即可,适配高维场景:
>>> gamma[tuple(G.T)] array([16, 14])
之前写法错误原因
- 直接写
gamma[G]时,NumPy 会把整个G作为*第一个维度(axis=0)*的索引数组,返回形状为(2, 3, 3, 3)的结果,和预期逻辑完全不符。 np.take(gamma, G)默认同样仅在第一个维度上取值,和gamma[G]逻辑一致,无法匹配多维度索引的需求。
逻辑验证
G是2行3列的数组,转置后得到3行2列的数组,每一行对应一个维度的索引序列:
>>> G.T array([[1, 1], [2, 1], [0, 1]])
三个维度的索引按位置配对后就是(1,2,0)和(1,1,1),刚好对应你要取的gamma[1,2,0]=16、gamma[1,1,1]=14,结果完全匹配预期。
内容的提问来源于stack exchange,提问作者nalzok
相关产品推荐
相关产品推荐

