2017-12-02 6 views
1
import numpy as np 

score = np.array([ 
    [0.9, 0.7, 0.2, 0.6, 0.4], 
    [0.7, 0.9, 0.6, 0.8, 0.3], 
    [0.2, 0.6, 0.9, 0.4, 0.7], 
    [0.6, 0.8, 0.4, 0.9, 0.3], 
    [0.4, 0.3, 0.7, 0.3, 0.9]]) 

l2= [(3, 5), (1, 4), (2, 3), (3, 4), (2, 5), (4, 5)] 

スコアリストは、エッジリストに基づいて対応するスコアベクトルを取得したいとします。スコアの配列は、スコア(1,2)がエッジ(1,2)を表す隣接行列を表します。グラフのエッジに基づいて対応するスコア

OUTPUT: 

[0.7 0.6 0.6 0.4 0.3 0.3] 

答えて

2

私たちは、配列へのインデックスを保持するタプルのリストを変換してからslicingやタプルパックのものを使用することができます。

score[l2_arr[:,0], l2_arr[:,1]] 

を別の - - 完全性については

score[tuple(l2_arr.T)] 

が、ここではループの理解を使用して、自分の

l2_arr = np.asarray(l2)-1 

その後、一つの方法は、次のようになります。

ので、配列に変換します行と列のインデックスを抽出し、配列の変換を避ける -

score[[i[0]-1 for i in l2], [i[1]-1 for i in l2]] 
+0

私のl2のサイズは100,000です。どれが最適でしょうか? –

+0

@ChaitaliSarkarわからない。自分でテストしますか? – Divakar

+0

出力を[0.7 0.6 0.6 0.4 0.3 0.3]の形式にすることはできますか? –

関連する問題