朱莉娅 - 数组的绝对值

ecj*_*cjb 1 math linear-algebra absolute-value julia

我想获得以下数组的绝对值:

x = [1.1 -22.3 3.01, -1]
Run Code Online (Sandbox Code Playgroud)

即:我想要一个类型的输出:x2 = [1.1 22.3 3.01 1] 但是,当我键入:

abs(x)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

ERROR: MethodError: no method matching abs(::Array{Float64,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
Run Code Online (Sandbox Code Playgroud)

fre*_*kre 9

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 Array{Float64,1}:
  1.1 
 22.3 
  3.01
  1.0
Run Code Online (Sandbox Code Playgroud)

或者你可以使用"点符号",这更符合意义:

julia> abs.(x)
4-element Array{Float64,1}:
  1.1 
 22.3 
  3.01
  1.0
Run Code Online (Sandbox Code Playgroud)

  • [`@.` 宏](https://docs.julialang.org/en/v1/base/arrays/#Base.Broadcast.@__dot__) 非常方便,特别是对于更复杂的情况。`@。x2 = 绝对值(x)` (2认同)