我正在将一些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
here文档条目。然后我发现this Github pull request在其定义中弃用了logspace
,因此目前看来这是创建对数间隔序列的方法:
julia> X_julia = 10 .^ range( -3, 3, length = 101 )
101-element Array{Float64,1}:
0.001
0.0011481536214968829
0.0013182567385564075
⋮
1000.0
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
吗?
这将返回一个生成器,因此它不会分配数组,并且应该易于理解并供其他用户使用
相关问题 更多 >
编程相关推荐