0

私は距離を計算してからk-meansアルゴリズムを適用するプログラムを作っています。私は小さなリストでテストしましたが、それは正常に動作していますが、元のリストは非常に大きく(> 5000)、永遠に取っていて、実行を終了しました。 outer()やその他の並列関数を使用して距離関数に適用して、これをより高速にすることはできますか?pythonでループを避けるためにreduceやmapなどの関数を使う

strings = ['cosine cos', 'cosine', 'cosine???????', 'l1', 'l2', 'manhattan'] 

そして、このようなその距離3Dアレイリターン:私は小さなセットに

[[[ 0.   0.25  0.47826087 1.   1.   0.89473684] 
    [ 0.25  0.   0.36842105 1.   1.   0.86666667] 
    [ 0.47826087 0.36842105 0.   1.   1.   0.90909091] 
    [ 1.   1.   1.   0.   0.5   1.  ] 
    [ 1.   1.   1.   0.5   0.   1.  ] 
    [ 0.89473684 0.86666667 0.90909091 1.   1.   0.  ]]] 

は、上記アレイの各行には、文字列リスト内のアイテムのための距離を表します。ループのために使用してそれを行うための私の方法は次のとおりです。

arr_3d
strings = ['cosine cos', 'cosine', 'cosine???????', 'l1', 'l2', 'manhattan'] 


data1 = [] 


for j in range(len(np.array(list(strings)))): 

    for i in range(len(strings)): 
     data1.append(1-Levenshtein.ratio(np.array(list(strings))[j], np.array(list(strings))[i])) 

#n =(map(Levenshtein.ratio, strings)) 
#n =(reduce(Levenshtein.ratio, strings)) 
#print(n) 



k=len(strings) 
data2=np.asarray(data1) 
arr_3d = data2.reshape((1,k,k)) 
print(arr_3d) 

は、上記の配列です。上記のforループを置き換えるのにouter()またはmap()のどれを使うことができますか?リストstringsが大きければ、時間がかかり、決して結果が得られません。私は助けに感謝します。 Levenshtein.ratioはPythonの組み込み関数です。ここmapまたはreduceとしていたことにする

+1

'reduce'と' map'はこれをもっと速くしません。なぜ 'string [j]'の代わりに 'np.array(list(strings))[j]'をやっているのですか? – user2357112

+0

また、 'Levenshtein.ratio'はPythonに付属するものではありません。この機能はどこから来ていますか? – user2357112

+0

私の最後のエラーを動作させるのは古い試みですが、これは必須ではありません。文字列[j] ..でも可能ですが、それで早くするのですか? – Lelo

答えて

0
import numpy as np 

strings = ['cosine cos', 'cosine', 'cosine???????', 'l1', 'l2', 'manhattan'] 

k=len(strings) 

data = np.zeros((k,k)) 

for i,string1 in enumerate(strings): 
    for j,string2 in enumerate(strings): 
     data[i][j] = 1-Levenshtein.ratio(string1, string2) 

print data 

ませ利益ん、ループは@ user2357112が言及として実行する必要があるが、これはクリーンであり、それはあなたが全体に使用していたnp.array(list(strings))を回避するので高速に実行する必要があります。

+0

ありがとう。それはより速くなりました。クラスタリング操作が来るときでもまだ遅いです。 – Lelo

関連する問題