【问题标题】:euclidean distance matrix欧式距离矩阵
【发布时间】:2017-11-02 13:12:23
【问题描述】:

我想计算两个单词之间的欧几里得距离。首先,每个音素都被向量化了:

g = (0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0)
a = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0)
k = (0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0)
n = (0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0)
N = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)

因此,例如“gaN”和“gak”这两个词之间的距离是

dst1 = distance.euclidean(g,g)
dst2 = distance.euclidean(a,a)
dst3 = distance.euclidean(N,k)
dist = dst1+dst2+dst3
print(dist)

我想做的是一个巨大的矩阵,显示超过 800 个单词之间的所有距离。这应该如下表所示(如在 csv 文件中)

    gaN   gak   gan  gal ...
gaN 0     1.73  1.41
gak 1.73  0     2.24
gan 1.41  2.24  0
gal
...

谁能帮我解决这个问题?我目前正在使用 Python,但 R 也可以。

【问题讨论】:

  • 到目前为止你有什么尝试?你有计算两个词之间的欧几里得距离的函数吗?你知道如何将矩阵写入 CSV 文件吗? ...
  • 两个词之间的欧几里得距离到底是多少?您是否在使用某个模块,如果是,是哪个模块?有没有写过代码,在哪里?
  • 非常感谢。在 Python 中,我使用了欧几里得距离的内置函数(来自 scipy.spatial 导入距离),但是当我使用 RI 时写为:euc.dist

标签: python matrix euclidean-distance


【解决方案1】:

如您所知,欧几里得距离只能对数字对象进行操作。我不确定现象组是什么,但如果你已经有了所有单词的数字表示,那么它应该是微不足道的。 (在这种情况下,您的问题是将距离矩阵转换回 GaN, gak 表吗?如果是,则需要更多关于如何从那里到达现象组对象的信息。

就转换为 csv 而言,这是微不足道的。实际上,您可以使用出色的 pandas 包以零附加行来做到这一点:

将熊猫导入为 pd dist=pd.DataFrame(euclidean_distances(tbl1,tbl2)).to_csv('distances.csv')

【讨论】:

    猜你喜欢
    • 2022-11-21
    • 1970-01-01
    • 2014-11-18
    • 2018-05-11
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 2013-10-21
    相关资源
    最近更新 更多