【问题标题】:Difference in output between numpy linspace and numpy logspacenumpy linspace 和 numpy logspace 之间的输出差异
【发布时间】:2015-07-17 16:03:58
【问题描述】:

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.047100.0

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

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

    【讨论】:

    • 谢谢...这正是我想要获得从密集到稀疏的范围
    【解决方案2】:

    logspace 将其起点和终点分别计算为 base**startbase**stopbase 值可以指定,但默认为 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.        ])
    

    【讨论】:

      【解决方案3】:

      这很简单。

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

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

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

      【讨论】:

        【解决方案4】:

        来自numpy.logspace() 的文档-

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

        返回以对数刻度均匀分布的数字。

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

        对于您的情况,base 默认为 10,因此它从 10 提高到 0.02 到 10 提高到 2 (100)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-02
          • 2011-07-21
          • 2014-12-23
          • 2014-03-01
          • 2017-10-14
          • 2012-06-21
          • 2015-06-25
          • 1970-01-01
          相关资源
          最近更新 更多