我有一堆 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/