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

18

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个回答

30

2017年更新:NumPy 1.12版本包括一个函数,完全可以实现原问题所需的功能,即在对数空间中均匀地返回两个值之间的范围。

该函数是numpy.geomspace

>>> 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
谢谢...这正是我想要的,以获得从密集到稀疏的范围。 - Megha

21

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

4
numpy.logspace()的文档中可以得知:

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

返回等间隔的对数序列。

在线性空间中,该序列从base ** start(即base的start次方)开始,并以base ** stop结束(请参阅下面的endpoint)。

对于您的情况,默认的基数为10,因此它从10的0.02次方到10的2次方(即100)。


3

这很简单。

NumPy提供了在对数空间中均匀分布的数字。

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

您会注意到10^0.02是1.04712 ...,而10^2是100。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接