use*_*730 11
(对于此答案的过时版本,请参阅下面的水平线.)
在Julia 0.4 isapprox中引入了一个数组版本,所以你现在可以写:
isapprox(A, B)
Run Code Online (Sandbox Code Playgroud)
与标量情况一样,您可以将相对容差rtol和绝对容差指定atol为关键字参数.
但请注意,与NumPy allclose(以及下面此答案的先前解决方案)不同,array- isapprox首先计算一个范数,然后决定结果值.(显然,逐点检查是错误的isapprox.)默认情况下,使用Frobenius规范(vecnorm),但您可以使用norm关键字参数覆盖此行为.
顺便说一句,正如链接拉取请求中所提到的,在测试中你可以编写@test isapprox(A, B),所以@test_approx_eq现在已经过时并且不推荐使用0.6.此外,还有A ? B,它isapprox(A, B)可以像任何比较运算符一样使用和使用:a < b ? c ? d.
作为参考,这是此帖子的先前过时版本:
对于单个数字,isapprox定义.如果你想将它扩展到Arrays 上的元素比较,你可以使用:
all(x -> isapprox(x...), zip(A, B))
all(x -> isapprox(x...), zip(A, A + 1e-5)) # => false
all(x -> isapprox(x...), zip(A, A + 1e-6)) # => true
Run Code Online (Sandbox Code Playgroud)
没有allclose与Julia一起发布的函数:
julia> allclose
ERROR: allclose not defined
Run Code Online (Sandbox Code Playgroud)
我不知道现有的Julia函数是否提供了您想要的功能,但根据numpy.allclose文档,您可以自己实现(完成关键字参数):
function allclose(a, b; rtol = 1e-5, atol = 1e-8)
return all(abs(a - b) .<= (atol + rtol * abs(b)))
end
Run Code Online (Sandbox Code Playgroud)
julia> A = rand(5, 5)
5x5 Array{Float64,2}:
0.0833821 0.722352 0.474616 0.0997349 0.352403
0.557657 0.199624 0.748646 0.838296 0.0396182
0.9716 0.230623 0.215245 0.689457 0.261951
0.64731 0.0799202 0.877895 0.582062 0.601394
0.875966 0.776157 0.664024 0.0996859 0.12747
julia> allclose(A, A + 1e-4)
false
julia> allclose(A, A + 1e-6)
false
julia> allclose(A, A + 1e-8)
true
julia> allclose(A, A + 1, rtol = 1)
true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1397 次 |
| 最近记录: |