2

使用一系列 numpy

In [22]: np.arange(0.95,0.98,0.01)
Out[22]: array([ 0.95,  0.96,  0.97,  0.98])

正如我所料。但是,当我这样做时

In [23]: np.arange(0.9,1.2,0.1)
Out[23]: array([ 0.9,  1. ,  1.1])

我认为它必须这样做:

Out[23]: array([ 0.9,  1. ,  1.1, 1.2])

谁能向我解释为什么?

信息:Python 2.7.3(默认,2013 年 4 月 10 日,05:13:16)和 Numpy 1.7.1

4

1 回答 1

2

实际上,奇怪的行为是您所期望的。从文档

numpy.arange([start], stop[, step], dtype=None)

在给定的间隔内返回均匀间隔的值。

值在半开区间 [start, stop) 内生成(换句话说,包括 start 但不包括 stop 的区间)。

当使用非整数步长(例如 0.1)时,结果通常会不一致。对于这些情况,最好使用 linspace。

您可能会遇到一些浮点舍入错误:

>>> (0.98-0.95) / 0.01
3.0000000000000027
>>> (1.2-0.9) / 0.1
2.999999999999999

数组中的项目数当然是四舍五入的数字,所以第一种情况(错误地)包括端点,而第二种情况(正确地)不包括端点。正如文档建议的那样,看看np.linspace.

于 2013-07-08T17:20:51.693 回答