Julia - 数组的绝对值
Posted
技术标签:
【中文标题】Julia - 数组的绝对值【英文标题】:Julia - absolute value of an array 【发布时间】:2018-12-27 10:29:27 【问题描述】:我想得到以下数组的绝对值:
x = [1.1 -22.3 3.01, -1]
即:我想要以下类型的输出:x2 = [1.1 22.3 3.01 1]
但是当我输入时:
abs(x)
我得到一个错误:
ERROR: MethodError: no method matching abs(::ArrayFloat64,2)
Closest candidates are:
abs(::Pkg.Resolve.MaxSum.FieldValues.FieldValue) at /Users/vagrant/worker/juliapro-release-osx1011-0_6/build/tmp_julia/Julia-1.0.app/Contents/Resources/julia/share/julia/stdlib/v1.0/Pkg/src/resolve/FieldValues.jl:67
abs(::Pkg.Resolve.VersionWeights.VersionWeight) at /Users/vagrant/worker/juliapro-release-osx1011-0_6/build/tmp_julia/Julia-1.0.app/Contents/Resources/julia/share/julia/stdlib/v1.0/Pkg/src/resolve/VersionWeights.jl:40
abs(::Missing) at missing.jl:79
...
Stacktrace:
[1] top-level scope at none:0
【问题讨论】:
您是否希望abs
返回一个所有元素都是绝对值的数组?
感谢您的评论@George。是的!我想要x2 = [1.1 22.3 3.01]
类型的结果。我会在这个意义上更新问题
查看文档我猜for i = 0:length(x) x[i] = abs(x[i]) end
会起作用吗?或者调整新的x2
的大小并使用相同的 for 循环分配给它。
【参考方案1】:
Julia 不会自动将标量函数(如 abs
)应用于数组元素。你应该告诉 Julia 这就是你想要的,然后在你的数组上广播标量函数abs
,参见https://docs.julialang.org/en/v1/manual/arrays/#Broadcasting-1。这可以这样做
julia> x = [1.1, -22.3, 3.01, -1];
julia> broadcast(abs, x)
4-element ArrayFloat64,1:
1.1
22.3
3.01
1.0
或者你可以使用“dot-notation”,这更符合意境:
julia> abs.(x)
4-element ArrayFloat64,1:
1.1
22.3
3.01
1.0
【讨论】:
@.
macro 非常方便,尤其是对于更复杂的情况。 @. x2 = abs(x)
以上是关于Julia - 数组的绝对值的主要内容,如果未能解决你的问题,请参考以下文章
在Javascript中使数组中的所有数字成为绝对值[关闭]
偶然在博客中见对百度一个面试题的探讨,写些自己的看法以及指出探讨中不对的观点:百度面试题:求绝对值最小的数 有一个已经排序的数组(升序),数组中可能有正数负数或0,求数组中元素的绝对值最小的(