2016-05-09 7 views
0

私はPythonには新しく、相関が最も高い10個のアイテムを(10 x 3)マトリックスに格納しようとしています。最後の行の値(最小値)を指定し、より高い値の値が挿入されている場合は行の順序を変更します。私の問題は、値を読み取り、変更するためにposition(i、j)内の特定のアイテムにアクセスする方法を理解できないことです。ここでは、私のコードです:構造化配列Pythonの中で最も関連性の高いアイテムを10個保存する

dtype = [('tag1', 'S8'), ('tag2', 'S8'), ('correlation', 'f8')] 
most_related_tags = np.zeros((10,3),dtype=dtype) 

for i in tags: 
    for j in tags: 
    if(i['tag'] != j['tag']): 
     correlation = tagCorrelation(tagsFile,str(i['tag']),str(j['tag'])) 

     if(correlation > 0): 
      print most_related_tags[9,2] 
      if(most_related_tags[9,2] < correlation): 
       print "entered" 
       most_related_tags[9,2] = correlation; 
       most_related_tags[9,0] = str(i['tag']); 
       most_related_tags[9,1] = str(j['tag']); 
       most_related_tags = np.sort(most_related_tags,order='correlation') 

問題がmost_related_tags [9,2] most_related_tags.item(9,2)どちらが正しいオブジェクトを返すため

答えて

1

はあなたを持って、私のプログラムは、if文に入ったことがないということですあなたが最初に作成した配列を見ましたか?これは、各要素が構造化された記録である10x3配列、だ - 3つの値

In [173]: most_related_tags 
Out[173]: 
array([[(b'', b'', 0.0), (b'', b'', 0.0), (b'', b'', 0.0)], 
     [(b'', b'', 0.0), (b'', b'', 0.0), (b'', b'', 0.0)], 
     [(b'', b'', 0.0), (b'', b'', 0.0), (b'', b'', 0.0)], 
     ... 
     [(b'', b'', 0.0), (b'', b'', 0.0), (b'', b'', 0.0)], 
     [(b'', b'', 0.0), (b'', b'', 0.0), (b'', b'', 0.0)]], 
     dtype=[('tag1', 'S8'), ('tag2', 'S8'), ('correlation', '<f8')]) 

でだからmost_related_tags[9,1]['tag1']またはそのようなもので、個々のタグにアクセスする必要があります。

私はあなたが本当に10アイテム、あなたがtags['correlaton']tags[9]['tag1']、またはtags[3]を持つレコード、またはすべての相関関係で個々のタグ値にアクセス

In [174]: tags = np.zeros((10,),dtype=dtype) 

In [175]: tags 
Out[175]: 
array([(b'', b'', 0.0), (b'', b'', 0.0), (b'', b'', 0.0), (b'', b'', 0.0), 
     (b'', b'', 0.0), (b'', b'', 0.0), (b'', b'', 0.0), (b'', b'', 0.0), 
     (b'', b'', 0.0), (b'', b'', 0.0)], 
     dtype=[('tag1', 'S8'), ('tag2', 'S8'), ('correlation', '<f8')]) 

の配列をしたいと思います。

次にあなたが値を設定することができるはずです。

 if(most_related_tags[9]['correlation'] < correlation): 
      most_related_tags[9]['correlation'] = correlation 
      most_related_tags[9]['tag1'] = str(i['tag']) 
      most_related_tags[9]['tag2'] = str(j['tag']) 

やタプル

most_related_tags[9] = (str(i['tag']), str(ij['tag']), correlation) 

で全体のレコードを設定するあなたはで構造化された配列の値を設定します。

by indexing element by record number and field name 
by setting all values of a field with an array or list 
by setting a record with a tuple of values 
by setting multiple records with a list of tuples. 
+0

はい、3つのフィールドを含む項目の配列が必要でした。大いに感謝する –

関連する問題