从100个500x500数组中提取各位置前10小值组合数组的实现方案
实现方案
你可以通过NumPy的数组堆叠+部分排序直接实现需求,不需要对完整数组做全量排序,性能开销极低:
核心思路
把100个500x500的原始数组沿新增维度堆叠为三维数组后,沿堆叠维度提取每个坐标位置的前10小值即可。
代码示例
import numpy as np # 入参:arr_list 存储你所有100个原始500x500数组的列表 # 1. 沿第0轴堆叠为形状 (100, 500, 500) 的三维数组 stacked_arr = np.stack(arr_list, axis=0) # 2. 部分排序提取每个位置前10小的值(kth=9对应第10小值,仅保证前10个是最小的10个值) top10_arr = np.partition(stacked_arr, kth=9, axis=0)[:10] # 若需严格保证前10个值按升序排列,补充以下排序步骤 top10_arr = np.sort(top10_arr, axis=0) # 结果提取: # top10_arr[0] = 所有位置最小值(和你用np.minimum得到的结果完全一致) # top10_arr[1] = 所有位置第2小值 # ... # top10_arr[9] = 所有位置第10小值
额外说明
该方案仅对每个坐标位置的100个值做必要的部分排序,不会对任意一个完整的原始500x500数组做排序,完全符合你的需求要求。500x500规模下执行耗时不足1秒,性能表现优异。
内容的提问来源于stack exchange,提问作者RodX
相关产品推荐
相关产品推荐

