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

如何用2D索引数组提取3D NumPy数组值?或获取对应最小值数组?

解决方案

1. 用2D索引数组提取3D数组对应值

你可以用广播索引或者np.take_along_axis实现,这两种方法没有np.choose的列数限制,且效率更高:

方法一:广播索引

先生成前两个维度的网格索引,再和indices组合完成索引:

import numpy as np

# 假设vals和indices已定义
rows, cols = np.indices(indices.shape)
extracted_vals = vals[rows, cols, indices]

rows和cols会自动广播为与indices同形状的数组,每个位置(i,j)都会精准提取vals[i,j,indices[i,j]]。

方法二:np.take_along_axis(更简洁)

给indices增加一个维度匹配vals的axis=2,提取后压缩多余维度:

extracted_vals = np.take_along_axis(vals, indices[..., np.newaxis], axis=2).squeeze(axis=2)

indices[..., np.newaxis]将形状从(65,65)转为(65,65,1),与vals前两个维度对齐,take_along_axis沿axis=2提取对应索引的值,最后squeeze去掉冗余维度得到(65,65)的结果。

2. 直接获取每个网格位置的最小值数组

直接对vals沿第三个维度(axis=2)取最小值即可:

min_vals = vals.min(axis=2)

该操作会遍历每个(i,j)位置的3500个值,返回对应最小值,结果形状为(65,65)。

补充:np.choose崩溃原因

np.choose对输入数组的维度有严格限制(旧版本中最多支持32个选择项),你将vals重塑为(3500,65,65)后,选择项数量远超限制,因此触发错误。上述两种索引方法无此限制,更适配大维度数组场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:05:19