numpy数组中的min函数

1 投票
3 回答
8483 浏览
提问于 2025-04-17 14:13

我正在尝试从一个一维的numpy数组中找到最小值,这个数组看起来是这样的:

col = array(['6.7', '0.9', '1.3', '4', '1.8'],dtype='|S7'), 

我使用了col.min(),但是没有成功。

我按照这个链接上建议的方法尝试了,但是它没有识别'S7'作为有效字段。

处理这个问题的最佳方法是什么呢?我在读取值的时候或者使用最小值函数的时候,应该指定数据类型吗?

3 个回答

0

如果你不需要进行很多其他的数字运算,并且有理由希望数据以 str 格式存在,那么你可以直接使用Python自带的 minmax 函数,作用于你的数据列表 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

我应该在读取值的时候指定数据类型,还是在使用最小值函数的时候指定?

如果你知道输入的数据是数字,那么在读取数据的时候指定数据类型是有意义的。

撰写回答