2017-05-05 24 views
-1

你好,你將如何去創建一個從0到10的數組,例如增量爲0.1。在matlab中,你只需鍵入x = 0:0.1:10,但這在python中不起作用。對於0到1之間以0.01爲增量的內容,我使用了numpy.linspace(0,1,101)。 101爲1/0.01加1所以這一個簡單的方法將是最有幫助的一系列數值的增量

回答

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] 
0

最接近的事就是用numpy's r_ object:

>>> 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]) 

但是,儘管th是有利於交互使用,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] 

相比arange在這多,比numpy的方法慢得多(由70約爲係數我的機器)。韋恩的方法更慢:

>>> %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)