我想计算两个单词之间的欧几里德距离。首先,每个音素都是矢量化的:
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也可以。
答案 0 :(得分:0)
如您所知,欧几里德距离只能对数字对象进行操作。我不确定是什么样的现象,但是如果你已经对所有单词都有数字表示,那么它应该是微不足道的。 (在这种情况下,你的问题是将距离矩阵转换回GaN,gak表吗?如果是这样的话,需要更多关于你如何从那里到达phenome对象的信息。
至于转换为csv,这是微不足道的。实际上,您可以使用优秀的pandas
包来添加零行:
将pandas导入为pd DIST = pd.DataFrame(euclidean_distances(TBL1,TBL2))。to_csv( 'distances.csv')