我现在正在做一些文本分析,作为其中的一部分,我需要得到一个特定列表中所有单词之间的Jaro距离矩阵(因此成对距离矩阵)如下:
│CHEESE CHORES GEESE GLOVES
───────┼───────────────────────────
CHEESE │ 0 0.222 0.177 0.444
CHORES │0.222 0 0.422 0.333
GEESE │0.177 0.422 0 0.300
GLOVES │0.444 0.333 0.300 0
所以,我试图用numpy.fromfunction
来构造它。构造矩阵,并将其结果传递给每个函数。在
我尝试了以下方法:
^{pr2}$注意:jaro嫒distance只接受2个字符串并返回一个浮点值。在
我得到一个错误:
File "<pyshell#26>", line 4, in distance
return 1 - jaro_distance(feature_dict[i], feature_dict[j])
TypeError: only integer arrays with one element can be converted to an index
我在函数的开头添加了print(i)
,print(j)
,我发现传递的不是实数坐标,而是奇怪的:
[[ 0. 0. 0. 0.]
[ 1. 1. 1. 1.]
[ 2. 2. 2. 2.]
[ 3. 3. 3. 3.]]
[[ 0. 1. 2. 3.]
[ 0. 1. 2. 3.]
[ 0. 1. 2. 3.]
[ 0. 1. 2. 3.]]
为什么?numpy站点上的examples清楚地表明,只传递了两个整数,其他什么都没有传递。在
我试图使用lambda
函数精确地再现他们的示例,但我得到了完全相同的错误:
distance_matrix = np.fromfunction(lambda i, j: 1 - jaro_distance(feature_dict[i], feature_dict[j]), shape=(len(feature_dict),len(feature_dict)))
任何帮助都是感激的-我想我误解了它。在
根据@xnx的建议,我研究了question,发现fromfunc并不是一个一个地传递坐标,而是同时传递所有的索引。这意味着如果数组的形状是(2,2),numpy将不会执行
f(0,0), f(0,1), f(1,0), f(1,1)
,而是将执行:但看起来我的特定函数可以矢量化,并将产生所需的结果。因此,实现所需的代码如下:
^{pr2}$而且效果很好。在
相关问题 更多 >
编程相关推荐