私は距離を計算してから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
としていたことにする
'reduce'と' map'はこれをもっと速くしません。なぜ 'string [j]'の代わりに 'np.array(list(strings))[j]'をやっているのですか? – user2357112
また、 'Levenshtein.ratio'はPythonに付属するものではありません。この機能はどこから来ていますか? – user2357112
私の最後のエラーを動作させるのは古い試みですが、これは必須ではありません。文字列[j] ..でも可能ですが、それで早くするのですか? – Lelo