首页 > 解决方案 > not 运算符 (!) 不适用于数组广播

问题描述

我想知道为什么 not 运算符不使用数组广播/元素操作。例如,如果我输入

 x = Array{Any}([1,2,3,4,missing,6])
 !ismissing.(x)

我收到一个错误ERROR: MethodError: no method matching !(::BitArray{1})

但如果我尝试 ismissing.(x) 它工作正常,

ismissing.(x)
#out > 6-element BitArray{1}: 0 0 0 0 1 0

并且没有广播的打字也可以作为一个整体工作(整个数组的一个输出)

!ismissing(x)
#out > True

所以我想知道是否有可能获得与使用“!”类似的结果 操作员。

标签: julia

解决方案


您还需要广播!到每个元素:

julia> x = Array{Any}([1,2,3,4,missing,6]);

julia> .!(ismissing.(x)) # the . comes before operators (!, +, -, etc)
6-element BitVector:
 1
 1
 1
 1
 0
 1

对于这种特定情况,您可以在广播之前否定该函数:

julia> (!ismissing).(x)
6-element BitVector:
 1
 1
 1
 1
 0
 1

推荐阅读