python - 大型数组的 Numpy 直方图

标签 python numpy scipy histogram

我有一堆 csv 数据集,每个大约 10Gb。我想从他们的列中生成直方图。但似乎在 numpy 中执行此操作的唯一方法是首先将整个列加载到一个 numpy 数组中,然后对该数组调用 numpy.histogram。这会消耗不必要的内存量。

numpy 是否支持在线分箱?我希望在读取它们时逐行迭代我的 csv 和 bins 值。这样在任何时候内存中最多只有一行。

自己动手并不难,但想知道是否有人已经发明了这个轮子。

最佳答案

正如您所说,推出自己的产品并不难。您需要自己设置容器并在遍历文件时重复使用它们。以下应该是一个不错的起点:

import numpy as np
datamin = -5
datamax = 5
numbins = 20
mybins = np.linspace(datamin, datamax, numbins)
myhist = np.zeros(numbins-1, dtype='int32')
for i in range(100):
    d = np.random.randn(1000,1)
    htemp, jnk = np.histogram(d, mybins)
    myhist += htemp

我猜测对于如此大的文件,性能将是一个问题,并且在每一行上调用直方图的开销可能太慢。 @doug's suggestion生成器似乎是解决该问题的好方法。

关于python - 大型数组的 Numpy 直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2464871/

相关文章:

python - 将 cupy.linalg.svd 应用于一堆矩阵

python - 有没有办法在现有变量上使用 Pillows "Image.convert()"?

python - 对 NumPy 数组进行排序并同时排列另一个数组

Python 从正态分布生成随机麦克斯韦分布

python - 如何将数据值转换为matplotlib的颜色信息?

python - 在 scipy.optimize.minimize 运行时检查内部变量?

Python多处理: Running a process after its parent exited

python - 一维数组上的 numpy apply_along_axis

python - 在 block 矩阵中排列 numpy 数组

python - 美国格式的电话号码到 Python 中的链接