2017-02-03 13 views
0

Numpyを使用してサブマトリックスを計算しようとしました。Numpyサブマトリックス(ランダムインデックス選択)

マトリックスの形状である

A:(15000 100)

B:(15000 100)

B_(3000、100)

C:(100 、100)

sample_index = np.random.choice(np.arange(int(15000*0.2)), size=int(int(15000*0.2)), replace=False) 

と最初のコードは

01のみsample_index

及び第二のコードからスライスされたサブ行列を使用

for ki in range(100): 
    self.A[sample_index, k] += B_[:, k] - np.dot(self.A[sample_index, : ], C[:, k]) 

すべての行列を使用

for k in range(100): 
    self.A[:, k] += B[:, k] - np.dot(self.A[:, : ], C[:, k]) 

あります。

しかし、最初のコードの計算時間は2番目のコードよりも遅いです。

スピードアップの理由や解決方法をご存知ですか?

+0

代わりに 'A [:3000、k]'を試してください。スライスされた索引付けは、配列索引付け(基本v高度索引付け)よりも高速です。 – hpaulj

+0

「k」の外観はどうですか?なぜ、A [:、:] + = B - np.dot(A、C) 'ではないのですか? – hpaulj

+0

実際には、random index sample_index = np.random.choice(np.arange(int(15000 * 0.2))、size = int(15000 * 0.2)、replace = False)を選択します。 と sample_index = np。 arange(int(15000 * 0.2))はテスト用です – Kyeongpil

答えて

0

実際に入力行列をコピーしています。入力を読み込んでいるだけの場合は、それをコピーする必要はありません。

import numpy as np 
a = np.random.rand(10000).reshape(100, 100) 
b = np.random.rand(10000).reshape(100, 100) 
i = list(range(10)) 
a_sub0 = a[:10] # view 
a_sub1 = a[i] # copying 

# you can change the original matrix from the view 
a_sub0[0, 0] = 100 
(a[0, 0] == 100.0) and (a_sub1[0, 0] != 100.0) # True 
関連する問題