Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:针对graphlab.SFrame的所有行,在一行的不同列上迭代一个操作_Python_Loops_Graphlab_Sframe - Fatal编程技术网

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

Python:针对graphlab.SFrame的所有行,在一行的不同列上迭代一个操作,python,loops,graphlab,sframe,Python,Loops,Graphlab,Sframe,有一个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距离。下面是使用循环的操作 d

有一个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
距离。下面是使用循环的操作

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中的循环快得多