我是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)也不返回正确的对象
答案 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.