Julia(v1.3.1)中是否存在“logspace”的替代品?

2024-10-02 08:15:13 发布

您现在位置:Python中文网/ 问答频道 /正文

背景和现有解决办法

我正在将一些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文档中找不到相同的函数,经过一些搜索之后,我发现了一个较旧的logspacehere文档条目。然后我发现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        

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 )

Tags: 函数代码numpy间隔对数range序列element
1条回答
网友
1楼 · 发布于 2024-10-02 08:15:13

你不能像这样定义你自己的函数logrange

logrange(x1, x2, n) = (10^y for y in range(log10(x1), log10(x2), length=n))

?

这将返回一个生成器,因此它不会分配数组,并且应该易于理解并供其他用户使用

相关问题 更多 >

    热门问题