我有这样的数据帧:
apple aple apply
apple 0 0 0
aple 0 0 0
apply 0 0 0我想要计算字符串距离,例如apple、->、aple等。我的最终结果是:
apple aple apply
apple 0 32 14
aple 32 0 30
apply 14 30 0目前,这是我正在使用的代码(但它对于大数据来说非常慢):
columns = df.columns
for r in columns:
for c in columns:
m[r][c] = Simhash(r).distance(Simhash(c)) 有人能帮我有效地计算距离吗?
发布于 2014-09-19 03:13:25
有一个想法--由于输出是对称的,通过迭代每一对,你就可以计算每一对两次。此外,您还可以跳过元素与其自身之间的比较。因此,为了至少减少计算次数,您可以这样做-使用itertools仅计算成对的距离,然后使用pandas填充其余部分。
from itertools import combinations
from collections import defaultdict
data = df.index
output = defaultdict(dict)
for a,b in combinations(data, 2):
output[a][b] = Simhash(a).distance(Simhash(b))
for a in data:
output[a][a] = 0
df = pd.DataFrame(output)
df = df.fillna(df.T)你必须在一个更大的框架上测试,但我认为它会比你正在做的事情更快,并且应该给出相同的答案。
In [84]: df
Out[84]:
aple apple apply
aple 0 32 30
apple 32 0 14
apply 30 14 0https://stackoverflow.com/questions/25907936
复制相似问题