私は2つのnumpyの行列を持っているA
とB
:
A
マトリックスの値は、可能な限り1または0(ONまたはOFF)のみです。 B
行列には整数(最小値-1)があります。 行列の要素B(X-axis)
とそれらの頻度の間のヒストグラムをプロットする必要があります。それらは行列A
(対応する位置)にONとしてリストされています。
例えば:
IF A[1][1] and A[2][2] are 1,
AND B[1][1] and B[2][2] are 2,
THEN frequency of 2 should be 2 (similarly for each element of matrix B).
基本的に各要素についてB
の対応する要素があれば1によりその周波数が増加する、A
です1
。
私が扱っている行列は巨大です(3992x3992)。これをできるだけ効率的に行うにはどうすればよいですか?
B
すべての小さな正の整数の値の場合、次のようにすることができます。
count = np.bincount(B.ravel())
tally = np.bincount(B.ravel(), weights=A.ravel())
freq = tally / count
しかし、あなたは負の数を持っているので、それを安全にプレイしB
てnp.unique
最初に実行するのがおそらく最善です:
unq_val, unq_idx = np.unique(B.ravel(), return_inverse=True)
unq_count = np.bincount(unq_idx)
unq_tally = np.bincount(unq_idx, weights=A.ravel())
unq_freq = unq_tally / unq_count
今後数週間でnumpy1.9が登場した場合、最初の2行を1行に結合することで、パフォーマンスをさらに向上させることができます。
unq_val, unq_idx, unq_count = np.unique(B.ravel(), return_inverse=True,
return_counts=True)
その後、のx
値unq_val
とに対応するy
値が表示されunq_freq
ます。私のシステムでは、これで構成されたデータを使用します。
A = np.random.randint(2, size=(3992, 3992))
B = np.random.randint(50, size=(3992, 3992))
全体がユニークなものを通過せずに0.3秒で実行され、使用すると6秒強で実行されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加