首页 > 解决方案 > 使用 Python 而不是 R 的字符串距离矩阵花费大量时间

问题描述

我想使用 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 秒,生成完整输出需要166 小时。

当我在相同的数据集 uring stringdistmatrix上使用R时,几乎不需要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 的时间。

提前致谢。

标签: pythonr

解决方案


推荐阅读