矩阵太大了内存不够导致numpy报错

之前写过分块进行16位转8位的程序。今天使用一景大影像进行处理,发现程序报错了。

原因是,影像太大了,numpy一下子不能读取到矩阵的百分之二最小值和百分之98最大值。报错的代码如下:

global_min = np.percentile(array_data, 2)
global_max = np.percentile(array_data, 98)

改进

numpy.percentile() 是一个非常通用且强大的函数,但它可能不是性能最优的选择,尤其是在处理大数据集时。

使用 numpy.partition() 代替,numpy.percentile()

def fast_percentile(arr, percentile):
    # 将百分位转换为索引位置
    k = int((percentile / 100.0) * arr.size)
    # 使用 partition 函数来找到第k小的元素
    part = np.partition(arr.flatten(), k)[:k]
    return part[-1]

chunk_array = numpy矩阵数据
result = fast_percentile(chunk_array, 2)