2017-08-26 73 views
0

我有两个python列表(nltk synsets)。对于第一个列表中的每个项目,我想迭代第二个列表的所有项目,并输出一个值,该值将第二个列表的项目作为该方法的参数应用于第一个列表。对于列表中的每个项目,迭代另一个列表中的所有其他项目,输出一个数组-python

实施例:

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的每个项目,从而在包括含有一个值的每个可能的2路组合的相似性得分3×2矩阵从l1和l2的一个值。

我可以计算矩阵的第一行如下:

fwrd= l1[0] 
frow= np.asfarray([fwrd.path_similarity(i) for i in l2]) 

在FROW的值所得到的作为

array([  nan, 0.06666667]) 

此数组中的第一个值是wn.synset之间的相似性得分('in03')和wn.synset('help.v.01') 第二个值是 wn.synset('in03')和wn.synset('girl.n.01')之间的相似度分数。 )

数组中的第二行将包含l1中的第二项与l2中的两项之间的相似性分数。

我试过几种笨拙的方法,没有任何运气。谢谢你的帮助。另外,我真的很想了解代码解决方案如何工作,所以任何引用也会有所帮助。

+0

谢谢。我想我会需要itertools,但不知道哪个功能。对于那些可能试图做类似的事情的人来说,这是一点点改进。为了得到所提到的数组,我实际上使用了:'np.asfarray([i.path_similarity(j)for itertools.product(l1,l2)]中的i,j)reshape(len(l1),len(l2)) ' – RosieMB

回答

0

嵌套列表理解应该提供您正在寻找的输出:

[[fwrd.path_similarity(i) for i in l2] for fwrd in l1] 

只是通过这np.ndarray()

+0

谢谢。我想我会需要itertools,但不知道哪个功能。对于那些可能试图做类似的事情的人来说,这是一点点改进。为了得到所提到的数组,我实际上使用了:'np.asfarray([i.path_similarity(j)for itertools.product(l1,l2)]中的i,j)reshape(len(l1),len(l2)) ' – RosieMB

+0

@RosieMB您可以发布自己的问题的答案,很难在评论中看到答案。 – AChampion

相关问题