如何高效查找多数组列表中最小值的索引?
问题描述
假设我有一个包含多个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
相关产品推荐
相关产品推荐

