数据存储在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。
答案 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]),)