python - 使用 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 的时间。
提前致谢。
解决方案
推荐阅读
- jetbrains-ide - Goland 文件中的函数列表
- sql - 试图将表与我的员工表合并
- angular - 如何在自定义 Angular Schematics 中定位文件路径?
- pandas - 转换 Pandas 数据框偶数列的 DateFormat
- oop - 插件设计模式解释(如 Martin Fowler 所述)
- node.js - Google Stackdriver 错误报告 API - 包含自定义数据
- jquery - 获取选择了哪些单选按钮并在 Asp.net MVC 中隐藏输入(可能使用 jquery?)
- uinavigationcontroller - 通过 UINavigationController 将数据传递给 UIViewController
- reactjs - 我以相同的方式安装了多个库,并且 React 正在注册除一个之外的所有库。为什么它找不到这个特定的模块?
- vba - VBA - 通过多列重复电子邮件功能