私は非常に(非常に、非常に)大きな2次元配列を持っています.1,000列のオーダーですが、数百万行です(32GBマシンのメモリに収まらないほどです)。千列のそれぞれの分散を計算したいと思います。役立つ重要な事実の 1 つ: 私のデータは 8 ビットの符号なし整数です。
これが私がこれにどのようにアプローチすることを計画しているかです。まず、 countsという形状 (1000, 256)の新しい 2 次元配列を作成し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