2016-08-29 16 views
2

私は1と0の行列を与えられます。私は行列に1つのspecific行に向けた最高のコサインメトリックを持っている20行を見つける必要があります。
cosine(1row,5row),cosine(2row,5row),...,cosine(8row,5row),cosine(9row,5row)scipyで "余弦"メトリックを計算する最速の方法

私は10行を持っている場合は、第5回はspecificと呼ばれているが、私はこれらの間の最高値を選びたいです

まず、メトリクスをカウントしようとしました。 これは動作しませんでした:

A = ratings[:,100] 
A = A.reshape(1,A.shape[0]) 
B = ratings.transpose() 
similarity = -cosine(A,B)+1 
A.shape = (1L, 71869L) 
B.shape = (10000L, 71869L) 

エラーがある:Input vector should be 1-D.私はエラーなしで審美的にこれを実装する方法を、知りたい、しかし最も重要なのだろう - 最速される解決策?

私の意見では、最も速い方法はscipyの助けを借りて実現されていません。 specific行のすべてのものを取り、他のすべての行でこれらのインデックスを調べるだけです。最も一致度が高い行は、最も高い行列を持ちます。

もっと速い方法がありますか?

+0

あなたはmatrix'に1つの特定の行への最高のコサインメトリックを持っている 'と言って何を意味するのですか?サンプルデータセットと希望のデータセットを投稿できますか? – MaxU

+0

あなたが知っているように、scipyに[余弦距離](http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.spatial.distance.cosine.html)の機能があります。 –

+0

@ juanpa.arrivillagaはい、それはすべての距離を(すべての要素〜O(n!)の間で数えます)これは非常に非合理です –

答えて

0

最速の方法は、行列演算を使用することです:something like np.multipy(A,B)

関連する問題