用于小数字的Python numpy linspace

时间:2017-09-15 11:26:18

标签: 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应该“在指定的时间间隔内返回均匀间隔的数字。”

3 个答案:

答案 0 :(得分:2)

它正在做你所要求的:在1e-7和10之间创建一组线性增加的数字。因为这几乎与0到10的范围相同,所以它并不奇怪你得到一个增量。

你想要的是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)

答案 1 :(得分:2)

如果你希望这个系列像你所展示的那样,你可以采取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])

答案 2 :(得分: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]