我有一個非常非常非常大的二維數組 - 大約有一千列的數量級,但有幾百萬行(足以使它不適合內存在我的32GB機器上)。我想計算千列中每一列的方差。一個關鍵的事實有助於:我的數據是8位無符號整數。使用numpy數組有效索引numpy數組
下面是我正在計劃如何解決這個問題。我將首先構造一個新的二維數組,稱爲計數與形狀(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
+1對付一個巨大的數組的聰明的方式!但是你仍然需要迭代很多行... – Jaime 2013-03-27 20:55:23
是的,但是不能避免這種情況。我實際上並沒有像這樣迭代它(我以塊的形式從磁盤加載它,然後異步地遍歷塊)。 – 2013-03-27 21:09:33