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

如何高效查找多数组列表中最小值的索引?

问题描述

假设我有一个包含多个numpy数组的列表:

import numpy as np
L = [
  np.array([-10, -8, -3, 2, 1]),
  np.array([-9, -4, -1, 3, 5]),
  np.array([-11, -5, -4, 0, 10])
]

需要以最高效的方式找到其中最小值的索引。以示例而言,最小值为-11,其在列表中的数组索引是2,在该数组内的索引是0,要求输出格式为(0, 2)(即元素索引在前,数组索引在后)。

高效解决方案

方法1:合并为二维数组(最优高效方案)

利用numpy的向量化操作,将列表中的数组合并为二维数组后直接计算索引,避免Python层面的循环,适合大规模数据集:

import numpy as np

L = [
  np.array([-10, -8, -3, 2, 1]),
  np.array([-9, -4, -1, 3, 5]),
  np.array([-11, -5, -4, 0, 10])
]

# 合并列表中的数组为二维数组
arr = np.vstack(L)
# 获取最小值的扁平化索引
flat_min_idx = np.argmin(arr)
# 转换为二维坐标(数组索引,元素索引)
array_idx, elem_idx = np.unravel_index(flat_min_idx, arr.shape)
# 调整为要求的输出顺序
result = (elem_idx, array_idx)
print(result)  # 输出 (0, 2)

方法2:遍历数组记录最小值(小型数据集适用)

如果数据集规模较小,可遍历每个数组并记录最小值及其索引,效率略低于方法1,但实现简单:

import numpy as np

L = [
  np.array([-10, -8, -3, 2, 1]),
  np.array([-9, -4, -1, 3, 5]),
  np.array([-11, -5, -4, 0, 10])
]

min_val = float('inf')
min_indices = (0, 0)

for array_idx, arr in enumerate(L):
    current_min_elem_idx = np.argmin(arr)
    current_min_val = arr[current_min_elem_idx]
    if current_min_val < min_val:
        min_val = current_min_val
        min_indices = (current_min_elem_idx, array_idx)

print(min_indices)  # 输出 (0, 2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:01:20