一系列数字的增量

时间:2017-05-05 19:55:14

标签: python-3.x

您好,如何以0.1的增量从0到10创建数组。在matlab中,您只需键入x = 0:0.1:10,但这在python中不起作用。对于像0到1这样的增量为0.01的东西,我已经使用了numpy.linspace(0,1,101)。 101来自1 / 0.01加1.所以更容易的方法是最有帮助的

2 个答案:

答案 0 :(得分:1)

的作用:

list(x/10 for x in range(101))

做你想做的事吗?

或者,您可以编写自己的特殊生成器:

In [23]: def myrange(start, end, step=1):
    ...:     cur = start
    ...:     while cur < end:
    ...:         yield cur
    ...:         cur += step
    ...:

虽然这对于浮点数不会很好,但因为浮点数增加了:

[0,
 0.1,
 0.2,
 0.30000000000000004,
 0.4,
 0.5,
 0.6,
 0.7,
 0.7999999999999999,
 0.8999999999999999,
 0.9999999999999999]

答案 1 :(得分:0)

最接近的是使用numpy的r_对象:

>>> np.r_[0:1:.1]
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9])

然而,尽管这对交互式使用有好处,但是numpy的arange速度更快,并且做同样的事情,但有更多的字符:

>>> np.arange(0, 1, .1)
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9])

但实际上,在MATLAB和Python中你真的应该使用linspace。浮点数存在一些奇怪的问题,linspace在两个平台上都更准确。

如果你想在纯python中实现它,最简单的方法是列表理解:

>>> [x/10 for x in range(10)]
[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]

这比numpy方法慢很多(比我机器上的arange大约70倍)。 Wayne的方法仍然较慢:

>>> %timeit np.arange(0, 1000, .1)
6.16 µs ± 105 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

>>> %timeit np.r_[0:1000:.1]
13.7 µs ± 146 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

>>> %timeit [x/10 for x in range(10000)]
423 µs ± 7.74 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

>>> %timeit list(x/10 for x in range(10000))
609 µs ± 14.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

>>> %timeit list(myrange(0, 1000, .1))
918 µs ± 11.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)