有一个SFrame,其中的列具有dict元素。

import graphlab
import numpy as np
a = graphlab.SFrame({'col1':[{'oshan':3,'modi':4},{'ravi':1,'kishan':5}],
                     'col2':[{'oshan':1,'rawat':2},{'hari':3,'kishan':4}]})


我想为SFrame的每一行计算这两列之间的cosine距离。以下是使用for loop的操作。

dis = np.zeros(len(a),dtype = float)
for i in range(len(a)):
    dis[i] = graphlab.distances.cosine(a['col1'][i],a['col2'][i])

a['distance12'] = dis


这是非常低效的,如果行数很大,将花费数小时。有人可以建议一种更好的方法。

最佳答案

通常,您可以使用apply函数避免在SFrame上循环。在您的情况下,它看起来像这样:

a.apply(lambda row: graphlab.distances.cosine(row['col1'], row['col2']))


那应该比在Python中循环要快得多。

关于python - Python:针对graphlab.SFrame的所有行在一行的不同列之间进行迭代操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36740079/

10-11 13:26