我试图从一维 numpy 数组中找到一个最小值,它看起来像:
col = array(['6.7', '0.9', '1.3', '4', '1.8'],dtype='|S7'),
使用col.min()
,这是行不通的。
我按照NumPy 上的建议进行了尝试:从数值视图函数的记录数组中获取最小值/最大值,它无法将“S7”识别为有效字段。
处理这个问题的最佳方法是什么?我应该在读取值或使用 min 函数时指定数据类型吗?
我试图从一维 numpy 数组中找到一个最小值,它看起来像:
col = array(['6.7', '0.9', '1.3', '4', '1.8'],dtype='|S7'),
使用col.min()
,这是行不通的。
我按照NumPy 上的建议进行了尝试:从数值视图函数的记录数组中获取最小值/最大值,它无法将“S7”识别为有效字段。
处理这个问题的最佳方法是什么?我应该在读取值或使用 min 函数时指定数据类型吗?
问题是你有一个字符串数组,而不是一个数字数组。因此,您需要先将数组转换为适当的类型:
In [38]: col.astype(np.float64).min()
Out[38]: 0.90000000000000002
我是否应该在读取值或使用 min 函数时指定数据类型
如果您知道输入是数字,那么在读取数据时指定数据类型是有意义的。
另一种方法是将 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'
如果您不需要执行许多其他数值运算,并且您有理由更喜欢以str
格式保存数据,那么您始终可以使用本机 Pythonmin
并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'
一般来说,这不是处理数值数据的好方法,并且可能容易受到关于数组中的内容的许多错误假设的影响。但这只是另一种选择,如果您需要,或者您是否有特殊原因使用字符串(例如,您只计算最小值和最大值,而您对它们所做的只是显示它们)。