相应的变量(名称)无法正确打印(numpy)

时间:2018-03-06 01:47:26

标签: python-3.x numpy

数据存储在csv文件的三列中。 我正在尝试使用相应的名称打印最高的val。由于某些原因,即使它打印正确的最高值,它也不会打印具有最高值的正确名称。我使用以下代码。它出了什么问题?

import numpy as np
names    val
Jason    100
Jacob    250
Josh     90
John     80

name = data['Names']  # the first column in csv
val = (100, 250, 90, 80)

print(name[np.max(val)], np.max(val))

它应该打印Jacob,250但是我用错误的名字打印正确的val。

1 个答案:

答案 0 :(得分:1)

np.max(val)是该数组的最大值。但name[idx]需要索引,而不是值。你试过argmax吗?

In [474]: txt='''names    val
     ...: Jason    100
     ...: Jacob    250
     ...: Josh     90
     ...: John     80'''
     ...: 

In [476]: data = np.genfromtxt(txt.splitlines(), names=True, dtype=None,encoding
     ...: =None)
In [477]: data
Out[477]: 
array([('Jason', 100), ('Jacob', 250), ('Josh',  90), ('John',  80)],
      dtype=[('names', '<U5'), ('val', '<i8')])
In [478]: names = data['names']
In [479]: val = data['val']
In [480]: val
Out[480]: array([100, 250,  90,  80])
In [481]: np.max(val)
Out[481]: 250
In [483]: names[np.max(val)]
...
IndexError: index 250 is out of bounds for axis 0 with size 4

names[250]没有意义,是吗?

改为使用argmax:

In [484]: idx=np.argmax(val)
In [485]: idx
Out[485]: 1
In [486]: names[idx]
Out[486]: 'Jacob'
In [487]: data[idx]
Out[487]: ('Jacob', 250)

或者使用布尔掩码

In [488]: val==np.max(val)
Out[488]: array([False,  True, False, False])
In [489]: data[_]
Out[489]: array([('Jacob', 250)], dtype=[('names', '<U5'), ('val', '<i8')])
也可以使用

where

In [490]: np.where(val==np.max(val))
Out[490]: (array([1]),)