2016-05-16 12 views
0

外側のforループでは、​​をx座標に、内部ループでy座標をk2としています。このループは基本的に他の目的のためのものであり、tempディクショナリを作成することです(他の目的のために)。だから、私はループ構造を削除することはできません。私は座標が​​、k2の内側のループで計算する値を持つcoo_matrixを作成しようとしています。ここ疎Coo_matrixを作成し、2つのforループ構造内で更新する

は私のこの短いコードである:

for k1,v1 in s.iteritems(): 
    xdict[k1] = None 
    for k2,v2 in s.iteritems(): 
     tempdict = {} 
     if k2 in xdict.keys(): 
      continue 
     if k1 == k2: 
      continue 
     tempdict[k1] = v1 
     tempdict[k2] = v2 
     r = reduce(set.intersection, (set(val) for val in tempdict.values())) 
     new_kee = 'C(' + k1 + ',' + k2 + ')' 
     ydict[new_kee] = len(r) 

入力「S」、次のサンプルのキーと値を持つ辞書です:

216 [234] 
1305 [234, 234, 298, 429] 
2961 [241, 264] 
211 [143] 
.... 

内側ループは、それぞれの交点を算出します重複することなく2つのレコードの私の新しい辞書では、交差点の結果の出力は以下のような保存されます。

    :この時点で

    c(216,1305) -> 1 
    c(216,2961) -> 0 
    c(216,211) -> 0 
    c(1305,2961) -> 0 
    c(1305,211) -> 0 
    c(2961,211) -> 0 
    ... 
    

    、私はそのようなものとして上記算出された座標とスパースcoo_matrixに値を格納したいです座標の

  • (216,1305)値1は、....値0
    等を格納する座標の
  • (216,2961)に格納する

座標(k1,k2)の値がlen(r)の疎なcoo_matrixを作成する際に助けが必要です。固定サイズのすべてのループ構造の前に行列を作成してループ内で更新する必要があるかどうか、あるいは他の方法ではわからない。

この問題について何かお手伝いしてもらえますか?

+1

私はあなたが助けて欲しいもの見当がつかない...たぶん入力(S'は、最初は何であるか ')と出力をお見せ達成したい。 –

+0

Sir、入力は次のサンプルキーと値を持つ辞書です:216 [234] 1305 [234,234,298,429] 2961 [241,264] 211 [143] .... .. – Gowtham

+0

@Gowthamあなたの質問についての追加情報を提供する際には、コメントをコメントとして追加するのではなく、情報を編集してください。 – buczek

答えて

0

ここで私はそれをやるでしょう。二つの機能を定義します。以下のように

def new_matrix(n,m): 
    """Create a new matrix of dimensions 'n' by 'm'.""" 
    return [[0 for col in range(m)] for row in range(n)] 

def update_matrix(matrix,row,col,val): 
    """Update a matrix at row,col position with the value 'val'.""" 
    matrix[row][col] = val 

はあなたのコードを更新します。

#You need to know the size ahead of time 
#Replace row, col with appropriate dimensions 
matrix = new_matrix(row,col) 

for k1,v1 in s.iteritems(): 
    xdict[k1] = None 
    for k2,v2 in s.iteritems(): 
     tempdict = {} 
     if k2 in xdict.keys(): 
      continue 
     if k1 == k2: 
      continue 
     tempdict[k1] = v1 
     tempdict[k2] = v2 
     r = reduce(set.intersection, (set(val) for val in tempdict.values())) 
     new_kee = 'C(' + k1 + ',' + k2 + ')' 
     ydict[new_kee] = len(r) 

     #Update your matrix here: 
     update_matrix(matrix,k1,k2,len(r)) 
関連する問題