2017-08-17 17 views
0

私はn次元ベクトルを持っており、これは真理値の距離を使ってn次元ベクトルのリストにそのk最近傍を求めたい。euclidian distanceを使用してnumpy配列のリストのnumpy配列の最近隣を見つけよう

私は以下のコード(k = 10)を書いていますが、動作は遅いですが、より最適なソリューションがあるかどうかは疑問でした。

def nearest_neighbors(value, array, nbr_neighbors=1): 
    return np.argsort(np.array([np.linalg.norm(value-x) for x in array]))[:nbr_neighbors] 

答えて

0

saschaが言っていたように、計算時間を50時間から36分に短縮したscipyライブラリ(ただし、NearestNeighborsメソッド)を使用しました。専用のライブラリがこれに対してはるかに最適化されているので、私は自分自身を再実装しようとするべきではない計算の種類です。

NearestNeighborsメソッドでは、値のリストを渡すこともでき、各値に対してk個の最近隣を返します。

最終的なコードは以下のとおりであった:

def nearest_neighbors(values, all_values, nbr_neighbors=10): 
    nn = NearestNeighbors(nbr_neighbors, metric='cosine', algorithm='brute').fit(all_values) 
    dists, idxs = nn.kneighbors(values) 
+0

あなたは答えとして彼の答えを選択して、エンド編集としてあなたのポストにこれを追加する必要があります。 – dawg

関連する問題