首页 > 解决方案 > 在大型 numpy 数组上应用聚合函数

问题描述

我正在尝试计算大型 numpy 数组的平均值。最初,我尝试过:

data = (np.ones((10**6, 133))
        for _ in range(100))
np.stack(data).mean(axis=0)

但我得到了

numpy.core._exceptions.MemoryError:无法为形状为 (100, 1000000, 133) 且数据类型为 float32 的数组分配 xxx GiB

在原始代码中,数据是更有意义的向量的生成器。

我考虑过使用 dask 进行这样的操作,希望它将我的数据分成由磁盘支持的块。

import dask.array as da
import numpy as np

data = (np.ones((10**6, 133)) for _ in range(100))
x = da.stack(da.from_array(arr, chunks="auto") for arr in data)
x = da.mean(x, axis=0)
y = x.compute()

但是,当我运行它时,该过程以“Killed”终止。

如何在单机上解决此问题?

标签: pythonarraysnumpydask

解决方案


您可以尝试这种方法:

agg_sum = np.zeros((10**6, 133))
total = 100

for dt in data:
    agg_sum = agg_sum + dt
_mean = agg_sum/total

推荐阅读