gpt4 book ai didi

julia - 在 Julia 中将类型 Array{Union{Missing, Float64},1} 转换为 Array{Float64,1}

转载 作者:行者123 更新时间:2023-12-01 16:02:55 26 4
gpt4 key购买 nike

我有一个包含一些缺失值的 float 数组,因此它的类型是 Array{Union{Missing, Float64},1}。是否有将非缺失部分转换为Array{Float64,1}的命令?

最佳答案

这里有三个解决方案,按优先顺序排列(感谢@BogumilKaminski 提供的第一个解决方案):

f1(x) = collect(skipmissing(x))
f2(x) = Float64[ a for a in x if !ismissing(a) ]
f3(x) = x[.!ismissing.(x)]

f1 使用 skipmissing 延迟加载数组(对例如迭代有用),然后通过 collect 构建数组。

f2 使用 for 循环,但可能比 f1 慢,因为最终数组长度不是提前计算的。

f3 使用广播,并在进程中分配临时对象,因此可能是三者中最慢的。

我们可以通过一个简单的基准来验证上述内容:

using BenchmarkTools
x = Array{Union{Missing,Float64}}(undef, 100);
inds = unique(rand(1:100, 50));
x[inds] = randn(length(inds));
@btime f1($x);
@btime f2($x);
@btime f3($x);

导致:

julia> @btime f1($x);
377.186 ns (7 allocations: 1.22 KiB)

julia> @btime f2($x);
471.204 ns (8 allocations: 1.23 KiB)

julia> @btime f3($x);
732.726 ns (6 allocations: 4.80 KiB)

关于julia - 在 Julia 中将类型 Array{Union{Missing, Float64},1} 转换为 Array{Float64,1},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55175439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com