Я хочу сгенерировать матрицу расстояний между строками, используя python, как показано ниже.
str1 str2 str3 str4 ... str4k
str1 0.8 0.4 0.6 0.1 ... 0.2
str2 0.4 0.7 0.5 0.1 ... 0.1
str3 0.6 0.5 0.6 0.1 ... 0.1
str4 0.1 0.1 0.1 0.5 ... 0.6
. . . . . ... .
. . . . . ... .
. . . . . ... .
str20k 0.2 0.1 0.1 0.6 ... 0.7
У меня есть 2 файла CSV, файл crnt2 имеет 4K строк, а файл hist2 имеет 20K строк, и я использую приведенный ниже код для создания матрицы.
import textdistance
import numpy as np
import csv
def read_csv_data(fileName):
rdr = None
lst_temp=[]
with open(fileName,"r") as f:
rdr = csv.reader(f)
for r in rdr:
lst_temp.append(r)
return lst_temp
c = read_csv_data("crnt2.csv")
h = read_csv_data("hist2.csv")
m = np.zeros((len(h),len(c)), dtype=int)
for i in range(0,len(h)):
for j in range(0,len(c)):
m[i][j] = textdistance.levenshtein.distance(h[i][0],c[j][0])
np.savetxt("output.csv",m,delimiter=",")
Когда я запускаю свой код python, для его обработки требуется около 30 секунд row и 166 часов для получения полного вывода.
И когда я использую R в том же наборе данных uring stringdistmatrix , тогда это вряд ли займет от 2 до 3 минут для получения того же результата.
> a <- read.csv("crnt2.csv")
> b <- read.csv("hist2.csv")
> c <- stringdistmatrix(a$column1,b$column1, method = c("jw"))
> write.csv(c,file = "output.csv")
Уловка в том, что мне придется использовать решение Python только для этого, не могу использовать R, поэтому, пожалуйста подскажите, как мне сократить время, используя Python.
Заранее спасибо.