Sha*_*ang 10 python arrays numpy
Numpy linspace在指定的时间间隔内返回均匀间隔的数字.Numpy logspace返回的数字在对数刻度上均匀分布.
我不明白为什么numpy logspace经常从我设置的边界返回"超出范围"的值.在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)
Run Code Online (Sandbox Code Playgroud)
第一个输出是:
[ 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. ]
Run Code Online (Sandbox Code Playgroud)
这看起来很正确.但是,输出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. ]
Run Code Online (Sandbox Code Playgroud)
为什么输出1.047到100.0?
trv*_*rrp 19
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. ])
Run Code Online (Sandbox Code Playgroud)
Ale*_*ley 16
logspace计算它的起点和终点的base**start和base**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. ])
Run Code Online (Sandbox Code Playgroud)