我正在努力处理大型 numpy 数组。这是场景。我正在处理 300MB - 950MB 的图像,并使用 GDAL 将它们作为 Numpy 数组读取。读取数组使用的内存与预期的一样多,即。 250MB 用于 250MB 图像,等等...
当我使用 numpy 获取平均值、最小值、最大值或标准偏差时,就会出现我的问题。在 main() 中,我打开图像并读取数组(类型 ndarray)。然后我调用以下函数来获取二维数组的标准偏差:
def get_array_std(input_array):
array_standard_deviation = numpy.std(input_array, copy=False)
return array_standard_deviation
在这里,我经常遇到内存错误(在 6GB 机器上)。来自 documentation看起来 numpy 正在返回一个与我的输入具有相同形状和 dtype 的 ndarray,从而使内存大小加倍。
使用:
print type(array_standard_deviation)
返回:
numpy.float64
此外,使用:
print array_standard_deviation
正如人们所期望的那样返回一个浮点标准。 numpy 是否再次读取数组以执行此计算?我最好遍历数组并手动执行计算吗?使用扁平数组如何?
我尝试将每个统计调用(numpy.amin()、numpy.amax()、numpy.std()、numpy.mean())放入它们自己的函数中,这样大数组就会超出范围,但没有运气那里。我也尝试将返回转换为另一种类型,但没有任何乐趣。
最佳答案
Numpy 对 std 执行了一个“天真的”reduce 操作。这是相当低效的内存。
在这里寻找更好的实现:
http://luispedro.org/software/ncreduce
关于arrays - Numpy.mean, amin, amax, std 巨额返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6958767/