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

如何获取大尺寸二维整数数组最大值的原二维索引?

如何获取大尺寸二维整数数组最大值的原二维索引?

嗨,我来帮你搞定这个问题!针对你这种1200万+元素的超大二维数组,完全没必要用扁平化排序的方法——不仅效率低,还丢了索引信息。咱们用更直接高效的方式,既能快速找到最大值,又能精准拿到它在原数组里的位置。

优先推荐:用numpy的内置函数(适配你的现有代码风格)

看你代码里用了flatten(),应该是在处理numpy数组对吧?那直接用argmax()和unravel_index()组合就完美解决了:

import numpy as np

# 假设你的Data是numpy数组
# 先找到最大值在扁平化数组里的索引
flat_max_idx = Data.argmax()
# 把一维索引转换成原二维数组的行、列索引
max_row, max_col = np.unravel_index(flat_max_idx, Data.shape)
# 直接取出最大值
max_value = Data[max_row, max_col]

这个方法的优势特别明显:argmax()只需要遍历一次数组就能找到最大值的位置(时间复杂度O(n)),比排序的O(n log n)快太多,对于千万级别的数组来说,速度差距会非常大。而且unravel_index()能直接帮你把一维索引映射回原二维结构,完全不用自己折腾。

纯Python列表的替代方案(如果不用numpy的话)

要是你处理的是纯Python嵌套列表,那咱们可以在遍历的时候直接记录最大值和对应的索引,全程不用扁平化:

max_val = -float('inf')
max_row, max_col = 0, 0

for i, row in enumerate(Data):
    for j, val in enumerate(row):
        if val > max_val:
            max_val = val
            max_row, max_col = i, j

不过要注意,纯Python遍历千万级元素的速度会比numpy慢不少,所以如果能用numpy的话还是优先选第一种方法。

刚好你是做孔径测光找最亮星系,拿到max_row和max_col之后,直接把这个位置作为中心,就可以处理周围半径内的区域啦!

备注:内容来源于stack exchange,提问作者CottonDog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 18:03:13