有一个包含dict
个元素的列的SFrame。
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
效率非常低,如果行数很大,则需要数小时。有人可以建议一个更好的方法。
答案 0 :(得分:3)
您通常可以使用apply
函数避免在SFrame上循环。在你的情况下,它看起来像这样:
a.apply(lambda row: graphlab.distances.cosine(row['col1'], row['col2']))
这应该比在Python中循环快得多。