我有一个非常(非常非常)大的二维数组 - 大约一千列,但有几百万行(足以让它不适合我的 32GB 机器的内存)。我想计算每一千列的方差。一个有帮助的关键事实:我的数据是 8 位无符号整数。
这就是我打算如何处理这个问题。我将首先构造一个名为counts的新二维数组,形状为 (1000, 256),其思想是counts[i,:] == np.bincount(bigarray[:,i])
. 一旦我有了这个数组,计算方差就很简单了。
麻烦的是,我不确定如何有效地计算它(这个计算必须实时运行,我希望带宽受限于我的 SSD 可以多快返回数据)。这是一些有效的方法,但速度非常慢:
counts = np.array((1000,256))
for row in iterator_over_bigaray_rows():
for i,val in enumerate(row):
counts[i,val] += 1
有没有办法写这个运行得更快?像这样的东西:
counts = np.array((1000,256))
for row in iterator_over_bigaray_rows():
counts[i,:] = // magic np one-liner to do what I want