Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 用以前的非缺失值填充“缺失”值的有效方法是什么?_Julia - Fatal编程技术网

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

我的解决方案现在起作用了。但不确定是否更有效。在我的初步测试中,您的解决方案似乎更快:我的解决方案正在运行。但不确定是否更有效。在我的初步测试中,您的解决方案似乎更快: