You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需循环通过索引数组从三维numpy数组取值填充二维数组

解决方案

你可以直接使用numpy的向量化索引实现,无需任何Python层循环,性能远高于嵌套循环实现:

方法1:手动构造高级索引

通过np.indices生成前两维的索引数组,和b组合直接索引a:

import numpy as np

# 你的原始数组生成代码
m, n, k  = 3, 2, 4
np.random.seed(1234)
a = np.random.randint(0,9,(m, n, k))
b = np.random.randint(0,k,(m,n))

# 核心实现
i, j = np.indices(b.shape)
c = a[i, j, b]

print(c)
# 输出:
# [[4 8]
#  [0 5]
#  [7 2]]

方法2:使用take_along_axisAPI(更简洁)

numpy内置的take_along_axis专门适配这种场景,不需要手动构造前序维度的索引:

# 核心实现,axis=2指定沿第三维取值
c = np.take_along_axis(a, b[..., np.newaxis], axis=2).squeeze(axis=2)

两种实现的时间复杂度均为O(mn),完全由numpy底层C代码执行,哪怕是千万级元素的超大数组也可以高效运行。

内容的提问来源于stack exchange,提问作者analognative

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:27:07