1

我试图从一维 numpy 数组中找到一个最小值,它看起来像:

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

使用col.min(),这是行不通的。

我按照NumPy 上的建议进行了尝试:从数值视图函数的记录数组中获取最小值/最大值,它无法将“S7”识别为有效字段。

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

4

3 回答 3

4

问题是你有一个字符串数组,而不是一个数字数组。因此,您需要先将数组转换为适当的类型:

In [38]: col.astype(np.float64).min()
Out[38]: 0.90000000000000002

我是否应该在读取值或使用 min 函数时指定数据类型

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

于 2013-01-30T19:05:32.567 回答
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'
于 2013-01-30T19:18:44.123 回答
0

如果您不需要执行许多其他数值运算,并且您有理由更喜欢以str格式保存数据,那么您始终可以使用本机 Pythonminmax在纯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'

一般来说,这不是处理数值数据的好方法,并且可能容易受到关于数组中的内容的许多错误假设的影响。但这只是另一种选择,如果您需要,或者您是否有特殊原因使用字符串(例如,您只计算最小值和最大值,而您对它们所做的只是显示它们)。

于 2013-01-30T19:13:42.960 回答