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 - 数组的绝对值的主要内容,如果未能解决你的问题,请参考以下文章

汇编数组绝对值

数组:正整数数组分成2组使其和的差的绝对值最小

在Javascript中使数组中的所有数字成为绝对值[关闭]

最小化数组的无序系数(差值的绝对值之和)

求无序数组的两两元素之差绝对值的最小值

偶然在博客中见对百度一个面试题的探讨,写些自己的看法以及指出探讨中不对的观点:百度面试题:求绝对值最小的数 有一个已经排序的数组(升序),数组中可能有正数负数或0,求数组中元素的绝对值最小的(