in()函数或in运算符的广播版本?

时间:2018-06-26 15:12:53

标签: julia

考虑一个数组,说0到4。我想测试每个元素是否在列表中,并返回一个布尔数组。调用in会返回一个布尔值,因为该左侧数组不是右侧数组的元素:

> a = 0:4;
> a in [1, 2]
false

Julia是否具有in()函数或in运算符的广播版本,该运算符返回对map的调用和lambda函数之类的数组?

> map(x -> x in [1,2], a)
5-element Array{Bool,1}:
 false
  true
  true
 false
 false

1 个答案:

答案 0 :(得分:5)

您可以使用广播,但是您必须告诉Julia不应该重复第二个参数,因此您应该这样做:

julia> in.(a, [[1,2]])
5-element BitArray{1}:
 false
  true
  true
 false
 false

julia> in.(a, Ref{Vector{Int}}([1,2]))
5-element BitArray{1}:
 false
  true
  true
 false
 false

两者都将在Julia 0.6.3和0.7下工作。

类似地,运算符(\in TAB ,与in函数同义)允许使用中缀符号进行广播。

julia> 0:4 .∈ [[1,2]]
5-element BitArray{1}:
 false
  true
  true
 false
 false