Julia 用以前的非缺失值填充“缺失”值的有效方法是什么?
我有一个向量Julia 用以前的非缺失值填充“缺失”值的有效方法是什么?,julia,Julia,我有一个向量 using Missings v = allowmissing(rand(100)) v[rand(100) .< 0.1] .= missing 但我发现对于大的向量来说速度很慢。用以前的非缺失值填充缺失值的优雅而有效的方法是什么?如果第一个值缺失,并且我无法执行代码,您需要一个init值。尽管如此,我的尝试如下: function replace_missing!(v,init=zero(eltype(v))) function reduce_missing(n
using Missings
v = allowmissing(rand(100))
v[rand(100) .< 0.1] .= missing
但我发现对于大的向量来说速度很慢。用以前的非缺失值填充缺失值的优雅而有效的方法是什么?如果第一个值缺失,并且我无法执行代码,您需要一个init值。尽管如此,我的尝试如下:
function replace_missing!(v,init=zero(eltype(v)))
function reduce_missing(n0,n1)
if ismissing(n1)
return n0
else
return n1
end
end
v[1] = reduce_missing(init,v[1])
for i = 2:length(v)
v[i] = reduce_missing(v[i-1],v[i])
end
return v
end
using Missings
v = allowmissing(rand(100))
v[rand(100) .< 0.1] .= missing
v = replace_missing!(v)
v = disallowmissing(v)
您需要一个init值,以防第一个值丢失,并且我无法执行您的代码。尽管如此,我的尝试如下:
function replace_missing!(v,init=zero(eltype(v)))
function reduce_missing(n0,n1)
if ismissing(n1)
return n0
else
return n1
end
end
v[1] = reduce_missing(init,v[1])
for i = 2:length(v)
v[i] = reduce_missing(v[i-1],v[i])
end
return v
end
using Missings
v = allowmissing(rand(100))
v[rand(100) .< 0.1] .= missing
v = replace_missing!(v)
v = disallowmissing(v)
简单快速的解决方案:
replace_missing!(v) = accumulate!((n0,n1) -> ismissing(n1) ? n0 : n1, v, v, init=zero(eltype(v)))
简单快捷的解决方案:
replace_missing!(v) = accumulate!((n0,n1) -> ismissing(n1) ? n0 : n1, v, v, init=zero(eltype(v)))
我的解决方案现在起作用了。但不确定是否更有效。在我的初步测试中,您的解决方案似乎更快:我的解决方案正在运行。但不确定是否更有效。在我的初步测试中,您的解决方案似乎更快: