numpy.core.memmap.memmap
と呼ばれるタイプ の 2 つの大きな配列がdata
ありnew_data
、700 万を超える float32 アイテムがあります。
私は現在このようにやっている同じループ内でそれらの両方を繰り返す必要があります。
for i in range(0,len(data)):
if new_data[i] == 0: continue
combo = ( data[i], new_data[i] )
if not combo in new_values_map: new_values_map[combo] = available_values.pop()
data[i] = new_values_map[combo]
ただし、これは不当に遅いため、numpy のベクトル化関数を使用する方法が適していると私は考えています。
ベクトル化された配列がそのアイテムを他の配列の対応するアイテムと比較できるように、インデックスを使用してベクトル化することは可能ですか?
2 つの配列を zip 圧縮することを考えましたが、これにより、準備に不当なオーバーヘッドが発生するのではないでしょうか?
この操作を最適化する他の方法はありますか?
コンテキスト: 目標は、無視される new_data 配列のゼロを除いて、2 つの配列間の対応する値の一意の組み合わせが結果の配列で異なる値で表されるように、2 つの配列を効果的にマージすることです。配列は 3D ビットマップ イメージを表します。
EDIT:available_values
まだ使用されていない一連の値でありdata
、このループの呼び出し間で保持されます。new_values_map
一方、このループが使用されるたびに空の辞書にリセットされます。
EDIT2: データ配列には整数のみが含まれます。つまり、ゼロとして初期化され、このループを異なる値で使用するたびに、最初は整数の範囲new_data
から引き出されたより多くの値が取り込まれます。理論上は何でもよい。available_values
new_data