Vector 选择不属于基本元素中整数列表的元素

Vector 选择不属于基本元素中整数列表的元素,vector,julia,element,Vector,Julia,Element,如果我有一个Float64向量Y和一个整数向量x,例如x=rand(1:1000500),有没有一种优雅的方法可以在非x项中提取Y的元素?到目前为止,我已经尝试了Y[findall([I∉ x代表1:1000中的i])]。这是可行的,但是来自R,我希望做一些类似于Y[!x]或Y[!x],这两种方法都会抛出错误。我想避免使用像DataFrames这样的包,但如果这不可能,我理解 提前感谢。使用逆变芯片中的而不是(这也可以通过数据帧导入)。 在您的情况下,这是Y[不是(x)],请参见下面的代码: j

如果我有一个Float64向量Y和一个整数向量x,例如x=rand(1:1000500),有没有一种优雅的方法可以在非x项中提取Y的元素?到目前为止,我已经尝试了
Y[findall([I∉ x代表1:1000中的i])]
。这是可行的,但是来自R,我希望做一些类似于
Y[!x]
Y[!x]
,这两种方法都会抛出错误。我想避免使用像DataFrames这样的包,但如果这不可能,我理解


提前感谢。

使用
逆变芯片中的
而不是
(这也可以通过
数据帧导入)。
在您的情况下,这是
Y[不是(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                                     

由于问题明确要求解决方案不依赖于标准库之外的包,因此这里有一个替代方案:

这里我们使用部分应用的
。从
中的
文档中:

在(集合)

∈(收藏)

创建一个函数,用于检查其参数是否为集合中的
,
i、 e.相当于集合
中的
y->y的函数

同样的东西可以用几种不同的方式编写,例如
Y[eachindex(Y)。∉ 参考(x)]
(适用于本例,但您应该理解并查看和)

需要注意的一点是,当
x
较大时,这些解决方案的性能不佳。为了提高性能,可以从
x
创建一个。例如:

Y[∉(Set(x)).(eachindex(Y))]
Y[∉(Set(x)).(eachindex(Y))]