在结构化数组Python中存储十个最相关的项目

时间:2016-05-09 20:48:09

标签: python numpy dictionary matrix

我是python的新手,我试图在(10 x 3)矩阵中存储具有最高相关性的十个项目,为此我想简单地检查最后一行值(是最小值)并在插入具有更高值的值时对行重新排序。我的问题是,我无法弄清楚如何访问位置(i,j)中的特定项目以读取和修改其值。这是我的代码:

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')

问题是我的程序从不输入if语句,因为most_related_tags [9,2]既不是most_related_tags.item(9,2)也不返回正确的对象

1 个答案:

答案 0 :(得分:1)

你看过你在开始时创建的数组了吗?它是一个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个项目的数组,

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')])

您可以使用tags[9]['tag1']tags[3]的记录或与tags['correlaton']的所有相关性访问各个代码值。

然后你应该能够用:

设置值
        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.