如果我有一个Float64向量Y和一个整数向量x,例如x=rand(1:10000500(,有没有一种优雅的方法可以在非x条目中提取Y的元素?到目前为止,我已经尝试过Y[findall([i ∉ x for i in 1:1000])]
。这是可行的,但来自R,我希望做一些类似Y[.!x]
或Y[!x]
的事情,这两个都会抛出错误。我想避免使用DataFrames这样的软件包,但如果这不可能,我可以理解。
提前谢谢。
使用InvertedIndices
中的Not
(这也与DataFrames
一起导入(。在您的情况下,这是Y[Not(x)]
,请参阅下面的代码:
julia> using InvertedIndices # or using DataFrames
julia> Y = collect(1:0.5:4)
7-element Vector{Float64}:
1.0
1.5
2.0
2.5
3.0
3.5
4.0
julia> x=rand(1:7, 3)
3-element Vector{Int64}:
3
2
6
julia> Y[Not(x)]
4-element Vector{Float64}:
1.0
2.5
3.0
4.0
由于问题明确要求提供一个不依赖于标准库之外的包的解决方案,因此这里是Przemyslaw Szufel解决方案的替代方案:
Y[∉(x).(1:length(Y))]
这里我们使用∉
的部分应用形式。来自in
:的文档
in(collection)
∈(collection)
创建一个函数来检查其参数是否为CCD_ 12,即等效于CCD_ 13的函数。
同样的东西可以用几种不同的方式编写,例如Y[eachindex(Y) .∉ Ref(x)]
(适用于这种情况,但您应该理解eachindex
并了解LinearIndices
和CartesianIndices
(。
需要注意的一点是,当x
较大时,这些解决方案的性能并不好。为了提高性能,可以从x
创建Set
。示例:
Y[∉(Set(x)).(eachindex(Y))]