【发布时间】:2018-02-04 09:11:57
【问题描述】:
我有两个 python 列表(nltk 同义词集)。对于第一个列表中的每个项目,我想遍历第二个列表的所有项目并输出一个值,该值使用第二个列表的项目作为方法的参数将方法应用于第一个列表。
例子:
l1 = [wn.synset('i.n.03'), wn.synset('need.v.03'), wn.synset('aid.n.01')]
l2 = [wn.synset('help.v.01'), wn.synset('girl.n.01')]
对于 l1 中的每个项目,我想计算 l2 中每个项目的相似度得分,从而生成一个 3x2 矩阵,其中包含每个可能的 2 路组合的相似度得分,其中包含来自 l1 的一个值和来自 l2 的一个值。
我可以按如下方式计算矩阵的第一行:
fwrd= l1[0]
frow= np.asfarray([fwrd.path_similarity(i) for i in l2])
产生 frow 的值
array([ nan, 0.06666667])
这个数组的第一个值是 wn.synset('i.n.03') 和 wn.synset('help.v.01') 之间的相似度得分 第二个值是之间的相似度得分 wn.synset('i.n.03') 和 wn.synset('girl.n.01')
数组中的第二行将包含 l1 中的第二个项目与 l2 中的两个项目之间的相似度分数,等等。
我尝试了一些笨拙的方法到达那里,但没有任何运气。谢谢你的帮助。另外,我真的很想了解代码解决方案的工作原理,因此任何参考资料都会有所帮助。
【问题讨论】:
-
谢谢。我想我需要 itertools 但不知道是哪个功能。对那些可能正在尝试做类似事情的人进行一些改进。为了得到提到的数组,我实际上使用了:
np.asfarray([i.path_similarity(j) for i,j in itertools.product(l1,l2)]).reshape(len(l1),len(l2))
标签: arrays python-3.x list iterable