numpy数组中的min函数
我正在尝试从一个一维的numpy数组中找到最小值,这个数组看起来是这样的:
col = array(['6.7', '0.9', '1.3', '4', '1.8'],dtype='|S7'),
我使用了col.min()
,但是没有成功。
我按照这个链接上建议的方法尝试了,但是它没有识别'S7'作为有效字段。
处理这个问题的最佳方法是什么呢?我在读取值的时候或者使用最小值函数的时候,应该指定数据类型吗?
3 个回答
0
如果你不需要进行很多其他的数字运算,并且有理由希望数据以 str
格式存在,那么你可以直接使用Python自带的 min
和 max
函数,作用于你的数据列表 list
:
In [98]: col = np.asarray(['6.7', '0.9', '1.3', '4', '1.8'])
In [99]: col
Out[99]:
array(['6.7', '0.9', '1.3', '4', '1.8'],
dtype='|S3')
In [100]: col.min()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-100-1ce0c6ec1def> in <module>()
----> 1 col.min()
TypeError: cannot perform reduce with flexible type
In [101]: col.tolist()
Out[101]: ['6.7', '0.9', '1.3', '4', '1.8']
In [102]: min(col.tolist())
Out[102]: '0.9'
In [103]: max(col.tolist())
Out[103]: '6.7'
一般来说,这种处理数字数据的方法并不是很好,因为可能会对数组中的内容产生很多错误的假设。不过,如果你确实需要这样做,或者有特别的理由使用字符串(比如,你只需要计算最小值和最大值,并且只用来显示它们),那么这也是一个可以考虑的选项。
2
另一种方法是使用Python内置的 min
函数,并结合 key
这个关键词:
>>> import numpy as np
>>> col = np.asarray(['6.7', '0.9', '1.3', '4', '1.8'])
>>> min(col,key=float)
'0.9'
4
问题在于你有一个字符串数组,而不是数字数组。所以你需要先把这个数组转换成合适的类型:
In [38]: col.astype(np.float64).min()
Out[38]: 0.90000000000000002
我应该在读取值的时候指定数据类型,还是在使用最小值函数的时候指定?
如果你知道输入的数据是数字,那么在读取数据的时候指定数据类型是有意义的。