簡體   English   中英

Python numpy linspace用於小數

[英]Python numpy linspace for small numbers

所以我對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應該“在指定的間隔內返回均勻間隔的數字”。

如果您希望該系列像您展示的那樣,則只需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])

它正在按照您的要求進行操作:創建一個在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])

正如Warren Weckesser所指出的那樣,從NumPy 1.12開始,還有np.geomspace函數更易於使用,因為您可以直接為其指定端點,而不是其十進制冪指數:

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

您可以只使用列表理解:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM