arrays - Numpy.mean, amin, amax, std 巨额返回

标签 arrays image-processing numpy

我正在努力处理大型 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/

相关文章:

Python:调整现有数组的大小并用零填充

python - 查找图像中的零像素,而不计算非零像素附近的像素

python - 从满足 bool 条件的 NumPy 数组中获取(列,行)索引

python - 对于其他列中的每次更改,我们如何用这些行的平均值替换多行数据?

c - 用于频繁随机访问的数组或链表?

linux - ImageJ 插件的问题

c - 访问 CIE L* a*b* 色彩空间中的像素信息

php - 错误的 json 数组 Python post 请求到 PHP

java - 使用 JNA 将 C 数组返回给 Java

c++ - 从 char 数组中删除条目