gpt4 book ai didi

Julia 错误 : no method matching strange behavior

转载 作者:行者123 更新时间:2023-12-01 06:13:33 27 4
gpt4 key购买 nike

我是 Julia 的新手,REPL 的答案对我来说似乎很奇怪:

当我运行这段不正确代码时:

mat = [1 2 3; 4 5 6]

function minus(mat::Array{Int64,2}, min)::Array{UInt8,2}
out = mat-min;
# out = UInt8.(out);
return out;
end

minmat = minus(mat);

我收到此正确错误消息:

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

但是当我运行这个正确的(我猜)代码时:

mat = [1 2 3; 4 5 6]

function minus(mat::Array{Int64,2}, min)::Array{UInt8,2}
out = mat-min;
# out = UInt8.(out);
return out;
end

minmat = minus(mat, 1);

Julia 给我这个不正确错误信息:

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
...

(注意函数签名中的“-”)

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

最佳答案

您尝试从数组中减去一个标量。您需要使用点运算符对该操作进行矢量化。

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

请注意,您的参数是 Int64Array,而您希望结果是 UInt8。当值超出范围时,您的函数调用很容易以 InexactError 结束。

关于 Julia 错误 : no method matching strange behavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53824445/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com