Julia错误:没有匹配奇怪行为的方法

Julia错误:没有匹配奇怪行为的方法,julia,Julia,朱莉娅对我来说是个新手,我觉得REPL的回答很奇怪: 当我运行此错误代码时: 我收到以下正确的错误消息: ERROR: LoadError: MethodError: no method matching minus(::Array{Int64,2}) Closest candidates are: minus(::Array{Int64,2}, ::Any) at /home/hugo/dev/julia/test.jl:5 ERROR: LoadError: MethodError:

朱莉娅对我来说是个新手,我觉得REPL的回答很奇怪:

当我运行此错误代码时:

我收到以下正确的错误消息:

ERROR: LoadError: MethodError: no method matching minus(::Array{Int64,2})
Closest candidates are:
  minus(::Array{Int64,2}, ::Any) at /home/hugo/dev/julia/test.jl:5
ERROR: LoadError: MethodError: no method matching -(::Array{Int64,2}, ::Int64)
Closest candidates are:
  -(::Complex{Bool}, ::Real) at complex.jl:298
  -(::Missing, ::Number) at missing.jl:93
  -(::Base.CoreLogging.LogLevel, ::Integer) at logging.jl:107
  ...
但当我运行正确的(我猜)代码时:

Julia给我的错误信息是:

ERROR: LoadError: MethodError: no method matching minus(::Array{Int64,2})
Closest candidates are:
  minus(::Array{Int64,2}, ::Any) at /home/hugo/dev/julia/test.jl:5
ERROR: LoadError: MethodError: no method matching -(::Array{Int64,2}, ::Int64)
Closest candidates are:
  -(::Complex{Bool}, ::Real) at complex.jl:298
  -(::Missing, ::Number) at missing.jl:93
  -(::Base.CoreLogging.LogLevel, ::Integer) at logging.jl:107
  ...
(注意函数签名中的“-”)


我在文档中没有看到与此相关的内容,所以我有点困惑,这就是我在这里提问的原因。

方法错误不是针对
减号函数,而是由行
out=mat min
生成的。给定
x::Matrix{Int}
y::Int
,Julia没有
x-y
的方法。要查看这一点,只需在REPL中粘贴以下内容:

[1 2 ; 3 4] - 5
如果您想要的行为是从
mat
的每个元素中减去
min
,那么您真正想要做的就是广播
min
参数。即使用:

out = mat .- min

如果进行了此更改,您的函数现在将按预期工作。

尝试从数组中减去标量。您需要使用点运算符将此操作矢量化

function minus(mat::Array{Int64,2}, min)::Array{UInt8,2}
    out = mat .- min;
    # out = UInt8.(out);
    return out;
end
现在运行此函数将产生:

julia> minmat = minus(mat, 1)
2×3 Array{UInt8,2}:
 0x00  0x01  0x02
 0x03  0x04  0x05

请注意,您的参数是
Int64
数组
,而您希望结果是
UInt8
。当值超出范围时,您的函数调用很容易以
不精确错误结束。

谢谢您的回答!对我来说,运算符实际上是函数是不自然的,这就是为什么我很难理解错误消息(也可能是因为我在长时间工作后才这么做)顺便问一下,我的问题是否愚蠢到删除它的程度?我不认为这对任何人都有用。不要删除这个问题!这将非常有用,因为Julia 0.6和Julia 1.0之间的广播行为发生了变化。也感谢您的回答!因为分数低,我接受了另一个。我忘记使用点运算符的原因是,我在工作中经常使用Matlab,在将标量减去数组时,它不需要点。@Hugortentesaux
我接受了另一个,因为分数较低