2017-09-15 45 views
1

所以我對linspace有一點問題。我想生成的數字像數組:小數字的Python numpy linspace

[0.000001, 0.00001, 0.0001 , 0.001 ,0 .01 , 0.1]

所以我嘗試下面的代碼:

alphas = np.linspace(0.0000001,10,num=11) 
print(alphas) 

,並得到結果:

[ 1.00000000e-07 1.00000009e+00 2.00000008e+00 3.00000007e+00 
4.00000006e+00 5.00000005e+00 6.00000004e+00 7.00000003e+00 
8.00000002e+00 9.00000001e+00 1.00000000e+01] 

比我以爲它必須是顯示和格式的問題,但嘗試之後

if(alphas[0]>1): 
    print("yes the first number is greater than 1") 
if(alphas[1]>1): 
    print("yes the second number is greater than 1") 

第二個數字確實大於一個

所以我的問題是什麼問題?因爲linspace應該「在指定的時間間隔內返回均勻間隔的數字」。

回答

2

它正在做你在問什麼:在1e-7和10之間創建一個線性遞增的數字集合。因爲這與0到10的範圍幾乎相同,所以增加1就不足爲奇了。

你在你的情況下,需要的是np.logspace這給你,而不是對數增加:

In [2]: np.logspace(-7, 1, num=11) 
Out[2]: 
array([ 1.00000000e-07, 6.30957344e-07, 3.98107171e-06, 
     2.51188643e-05, 1.58489319e-04, 1.00000000e-03, 
     6.30957344e-03, 3.98107171e-02, 2.51188643e-01, 
     1.58489319e+00, 1.00000000e+01]) 

正如指出的沃倫Weckesser,作爲NuPy 1.12也有個np.geomspace功能是更加容易的使用,你可以直接給它的端點,而不是其功率的十指數:

np.geomspace(1e-7, 10, num=11)

+0

* 「你想在你的情況是什麼np.logspace ......」 *或,如果你使用的是最近版本的numpy,[geomspace](https://docs.scipy.org/doc/numpy/reference/generated/numpy.geomspace.html)。 –

+0

@WarrenWeckesser啊,甜心,我錯過了。很方便。 –

1

你可以只取10功耗,如果你想要的系列像你展示。如果你甚至想要在對數空間中進行間隔,那麼就去找HannesOvrén的答案。

alpha = 10.**np.arange(-7, 2) 

印刷alpha給出:

Out[1]: 
array([ 1.00000000e-07, 1.00000000e-06, 1.00000000e-05, 
     1.00000000e-04, 1.00000000e-03, 1.00000000e-02, 
     1.00000000e-01, 1.00000000e+00, 1.00000000e+01]) 
0

你可以只用一個列表理解:

>>> a=[10.0**i for i in range(-7,-0)] 
>>> a 
[1e-07, 1e-06, 1e-05, 0.0001, 0.001, 0.01, 0.1] 
+1

或'10 ** np.arange(-7,0)' – hpaulj