矩阵太大了内存不够导致numpy报错
矩阵太大了内存不够导致numpy报错
ytkz之前写过分块进行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)