背景和现有解决方案
我正在将一些Python代码移植到Julia(v1.3.1),但在尝试将代码转换为易于阅读的Julia代码时遇到了问题。
在Python中(使用numpy
),我们已经创建了一个101元素的对数间隔序列,范围从0.001到1000:
>>> X = numpy.logspace( -3, 3, 101 )
array([1.00000000e-03, 1.14815362e-03, 1.31825674e-03, ..., 1.00000000e+03])
使用Julia和PyCall实现这个功能当然是这样的:
julia> using PyCall
julia> numpy = pyimport("numpy")
julia> X_python = numpy.logspace( -3, 3, 101 )
101-element Array{Float64,1}:
0.001
0.0011481536214968829
0.0013182567385564075
⋮
1000.0
但是我希望在我的当前项目中使用纯Julia实现这一过程。在Julia文档中找不到相同的函数后,经过一番搜索,我发现了一个旧版
logspace
的文档入口(在此)。然后我看到了这个Github拉取请求将logspace
弃用掉,并将其定义为该创建对数间隔序列的方法。julia> X_julia = 10 .^ range( -3, 3, length = 101 )
101-element Array{Float64,1}:
0.001
0.0011481536214968829
0.0013182567385564075
⋮
1000.0
TL;DR / 实际问题
julia> LinRange(1e-3, 1e3, 101)
101-element LinRange{Float64}:
0.001,10.001,20.001,…,1000.0
由于目前存在一个简单易读的函数
LinRange
,用于创建线性序列(如上所示),是否存在类似于LogRange
的函数用于创建对数序列?在这个项目中,我追求简单和易读性,因此虽然将
range
广播到10的指数可以从数学角度解决问题,但像LogRange(1e-3, 1e3, 101)
这样的形式会更容易让初学者或兼职程序员理解。编辑:当序列的限制为10的整数次幂时,代码相当清晰,但当限制为浮点数时,
LogRange()
和10 .^ ()
之间的可读性差异变得更加明显:julia> 10 .^ range( log10(1.56e-2), log10(3.62e4), length = 101 )
julia> LogRange( 1.56e-2, 3.62e4, 101 )
LogRange
恢复。 - daycaster