您好,如何以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.所以更容易的方法是最有帮助的
答案 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)