如何检查两个数组是否相等,即使它们在Julia中包含NaN值?
我试图比较两个数组。恰好数组的数据包含如何检查两个数组是否相等,即使它们在Julia中包含NaN值?,julia,Julia,我试图比较两个数组。恰好数组的数据包含NaN值,当您将数组与NaN值进行比较时,结果不是我所期望的 julia> a = [1,2, NaN] 3-element Array{Float64,1}: 1.0 2.0 NaN julia> b = [1,2, NaN] 3-element Array{Float64,1}: 1.0 2.0 NaN julia> a == b false 有没有一种优雅的方法可以在比较过程中忽略这些Nan,
NaN
值,当您将数组与NaN
值进行比较时,结果不是我所期望的
julia> a = [1,2, NaN]
3-element Array{Float64,1}:
1.0
2.0
NaN
julia> b = [1,2, NaN]
3-element Array{Float64,1}:
1.0
2.0
NaN
julia> a == b
false
有没有一种优雅的方法可以在比较过程中忽略这些
Nan
,或者有效地替换它们 您可以过滤掉每个阵列上的NaN:
a = [1, 2, NaN]
filteredA = filter(x -> !isnan(x), a)
b = [1, 2, NaN]
filteredB = filter(x -> !isnan(x), b)
print(a == b)
print(filteredA == filteredB)
然后,您可以创建一个执行过滤的函数,以及一个自定义比较函数,该函数在参数和比较上都使用过滤函数。不确定是否有更类似朱莉娅的方法。您可能希望使用
等质量(a,b)
(这也将缺失的视为等同于缺失的,但-0.0
不等同于0.0
)。或创建一个新类型。并创建一个Singletonnan
,用它代替nan
struct MyNaN end
nan = MyNaN()
并编写一个函数,用它替换NaN
s
with_nan(l) = map((x) -> if isnan(x) nan else x end, l)
然后可以使用此函数包装列表
a = [1, 2, NaN]
b = [1, 2, NaN]
with_nan(a) == with_nan(b)
## true
使用:
类似于==
,除了浮点数和
缺少值的情况isequal
将所有浮点NaN
值视为
彼此相等,将-0.0
视为不等于0.0
,并将缺失
视为
等于缺失
。始终返回一个Bool
值
哦,我看到这将是最快和最佳的解决方案!
julia> a = [1,2, NaN]
3-element Array{Float64,1}:
1.0
2.0
NaN
julia> b = [1,2, NaN]
3-element Array{Float64,1}:
1.0
2.0
NaN
julia> isequal(a, b)
true