numpy linspace和numpy logspace之间的输出差异

时间:2015-07-17 16:03:58

标签: python arrays numpy

Numpy linspace在指定的时间间隔内返回均匀间隔的数字。 Numpy logspace返回的数字在对数刻度上均匀分布。

我不明白为什么numpy logspace经常从我设置的边界返回“超出范围”的值。在0.022.0之间取数字:

import numpy as np
print np.linspace(0.02, 2.0, num=20)
print np.logspace(0.02, 2.0, num=20)

第一个的输出是:

[ 0.02        0.12421053  0.22842105  0.33263158  0.43684211  0.54105263
  0.64526316  0.74947368  0.85368421  0.95789474  1.06210526  1.16631579
  1.27052632  1.37473684  1.47894737  1.58315789  1.68736842  1.79157895
  1.89578947  2.        ]

看起来很正确。但是,np.logspace()的输出错误:

[   1.04712855    1.33109952    1.69208062    2.15095626    2.73427446
    3.47578281    4.41838095    5.61660244    7.13976982    9.07600522
   11.53732863   14.66613875   18.64345144   23.69937223   30.12640904
   38.29639507   48.68200101   61.88408121   78.6664358   100.        ]

为什么将1.047输出到100.0

4 个答案:

答案 0 :(得分:19)

2017更新:numpy 1.12包含一个与原始问题完全相同的函数,即返回在日志空间中均匀采样的两个值之间的范围。

该功能为Editors

>>> np.geomspace(0.02, 2.0, 20)
array([ 0.02      ,  0.0254855 ,  0.03247553,  0.04138276,  0.05273302,
        0.06719637,  0.08562665,  0.1091119 ,  0.13903856,  0.17717336,
        0.22576758,  0.28768998,  0.36659614,  0.46714429,  0.59527029,
        0.75853804,  0.96658605,  1.23169642,  1.56951994,  2.        ])

答案 1 :(得分:16)

logspace分别将其起点和终点计算为base**startbase**stop。可以指定base值,但默认情况下为10.0。

对于您的示例,您的起始值为10**0.02 == 1.047,停止值为10**2 == 100

您可以使用以下参数(使用np.log10计算):

>>> np.logspace(np.log10(0.02) , np.log10(2.0) , num=20)
array([ 0.02      ,  0.0254855 ,  0.03247553,  0.04138276,  0.05273302,
        0.06719637,  0.08562665,  0.1091119 ,  0.13903856,  0.17717336,
        0.22576758,  0.28768998,  0.36659614,  0.46714429,  0.59527029,
        0.75853804,  0.96658605,  1.23169642,  1.56951994,  2.        ])

答案 2 :(得分:2)

这很简单。

NumPy为您提供在日志空间中均匀分布的数字。

即。 10 ^(值)。其中值在起始值和终止值之间均匀分布。

你会注意到10 ^ 0.02是1.04712 ......而10 ^ 2是100

答案 3 :(得分:2)

来自numpy.logspace() -

的文档
  

numpy.logspace(start,stop,num = 50,endpoint = True,base = 10.0,dtype = None)

     

返回以对数刻度均匀间隔的数字。

     

在线性空间中,序列从基数**开始(从基数开始)   开始的力量)并以基数**停止结束(见下面的终点)。

对于你的情况,base默认为10,所以它从10上升到0.02到10上升到2(100)。