2016-04-20 6 views
1

graphlab.SFrameのすべての行に対して一列の異なる列を横切って動作を繰り返します。パイソン:<code>dict</code>要素を有する列と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}]}) 

IはSFrameの行ごとにこれら2つの列の間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 

これは非常に効率が悪く、行数が多い場合には数時間かかることがあります。誰かがより良いアプローチを提案してくれますか?

答えて

3

あなたは通常apply機能を使用することによりSFrameをループを回避することができます。あなたの場合は、次のようになります:

これは、Pythonでのループ処理よりもはるかに速くなければなりません。

関連する問題