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

mig*_*rin 2 julia

考虑一个数组,比如0到4.我想测试每个元素是否在列表中并返回一个布尔数组.所述的呼叫in返回单个布尔值,因为这左手侧阵列不是右侧数组的一个元素:

> a = 0:4;
> a in [1, 2]
false
Run Code Online (Sandbox Code Playgroud)

Julia是否有广播版本的in()函数或in运算符返回一个数组,如此调用map和lambda函数?

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

Bog*_*ski 5

你可以使用广播,但是你必须告诉Julia第二个参数不应该迭代,所以你应该这样做:

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

要么

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

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

类似地,?运营商(\inTABin功能同义)允许使用中缀表示法进行广播.

julia> 0:4 .? [[1,2]]
5-element BitArray{1}:
 false
  true
  true
 false
 false
Run Code Online (Sandbox Code Playgroud)

  • 我相信 `in.(a, Ref([1,2]))` 就足够了(并且等效)。 (2认同)