[英]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.