1

我有这样的数据框:

        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)) 

谁能帮我有效地计算距离?

4

1 回答 1

1

一个想法-由于输出是对称的,因此通过迭代每一对,您将每对计算两次。此外,您可以跳过元素与其自身之间的比较。因此,为了至少减少计算次数,您可以执行以下操作 - 使用 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      0
于 2014-09-18T19:13:24.940 回答