繁体   English   中英

Python:对于graphlab.SFrame的所有行,在一行的不同列上迭代一个操作

[英]Python: Iterate an operation across different columns of one row for all rows of a graphlab.SFrame

有一个带有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

这是非常低效的,如果行数很大,则需要数小时。 有人可以建议一个更好的方法。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM