在numpy中,您可以np.allclose(A, B)
查看数组A& B很接近。
朱莉娅有没有这样做的功能?
答案 0 :(得分:11)
(对于此答案的过时版本,请参阅下面的水平线。)
Julia 0.4中isapprox
的数组版本为introduced,所以您现在可以写:
isapprox(A, B)
与标量情况一样,您可以将相对容差rtol
和绝对容差atol
指定为关键字参数。
但请注意,与NumPy的allclose
(以及此答案的先前解决方案)不同,数组 - isapprox
首先计算一个范数,然后决定结果值。 (显然,逐点检查isapprox
is wrong 。)默认使用 Frobenius规范(vecnorm
),但你可以使用norm
关键字参数覆盖此行为。
顺便说一下,如链接拉取请求中所述,在测试中,您可以编写@test isapprox(A, B)
,因此@test_approx_eq
现已过时且deprecated as of 0.6。此外,还有A ≈ B
,相当于isapprox(A, B)
,可以像任何比较运算符一样使用:a < b ≈ c ≤ d
。
作为参考,这是此帖的先前过时版本:
对于单个数字,定义了isapprox
。如果你想将它扩展到Array
的元素比较,你可以使用:
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
答案 1 :(得分:6)
Julia附带了一个名为allclose
的功能:
julia> allclose
ERROR: allclose not defined
我不知道现有的Julia函数是否提供了您想要的功能,但根据numpy.allclose
文档,您可以自己实现(完成keyword arguments):
function allclose(a, b; rtol = 1e-5, atol = 1e-8)
return all(abs(a - b) .<= (atol + rtol * abs(b)))
end
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
答案 2 :(得分:3)
如果您正在编写测试,则using Base.Test
然后@test_approx_eq A B
应该有效。