【问题标题】:Python: Iterate an operation across different columns of one row for all rows of a graphlab.SFramePython:为graphlab.SFrame的所有行迭代一行的不同列的操作
【发布时间】:2016-04-20 09:52:51
【问题描述】:

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

这是非常低效的,如果行数很大,则需要数小时。有人可以提出更好的方法吗?

【问题讨论】:

    标签: python loops graphlab sframe


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      相关资源
      最近更新 更多