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

Python numpy linspace和numpy logspace之间的输出差异,python,arrays,numpy,Python,Arrays,Numpy,Numpy linspace返回指定间隔内的等距数字。Numpy logspace返回在对数刻度上均匀分布的数字 我不明白为什么numpy日志空间经常返回我设置的边界“超出范围”的值。取介于0.02和2.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

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

我不明白为什么numpy日志空间经常返回我设置的边界“超出范围”的值。取介于
0.02
2.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

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

例如,起始值为
10**0.02==1.047
,停止值为
10**2==100

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

这很简单

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

i、 e.10^(价值)。其中,值在开始值和停止值之间均匀分布

你会注意到10^0.02是1.04712。。。10^2是100-

numpy.logspace(开始、停止、num=50、endpoint=True、base=10.0、dtype=None)

返回在对数刻度上均匀分布的数字

在线性空间中,序列从基**开始(从基到基) 启动功率)并以基本**停止结束(见下文端点)


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

2017年更新:numpy 1.12包含一个函数,该函数完全符合原始问题的要求,即返回在日志空间中均匀采样的两个值之间的范围

功能是


谢谢…这正是我想要得到的从密集到稀疏的范围
>>> 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.        ])
>>> 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.        ])