Julia 中数组的逻辑操作

Logical operations on arrays in Julia

我有两个 1 和 0 的 nxm 矩阵(称它们为 A 和 B)。我想将它们转换为布尔变量,然后对它们应用“与”和“或”操作。在 python 中,这很容易:

A = np.array(A, dtype=bool)
B = np.array(B, dtype=bool)
    
A | B 
A & B

但是,我想在 Julia 中做同样的事情,但遇到了一些问题。我首先通过

转换为布尔值
A = convert(Array{Bool}, A)
B = convert(Array{Bool},B)

但后来我做了 A&&B,我得到了

TypeError: non-boolean (Array{Bool,2}) used in boolean context

我做错了什么?

我们首先创建存储 0-1 个值的矩阵:

julia> using Random

julia> Random.seed!(1234);

julia> A = rand([0, 1], 3, 4)
3×4 Array{Int64,2}:
 0  0  1  1
 0  1  1  0
 1  0  1  0

julia> B = rand([0, 1], 3, 4)
3×4 Array{Int64,2}:
 1  1  1  0
 0  1  1  1
 0  1  1  1

然后使用.广播Bool构造函数得到布尔矩阵:

julia> A_bool = Bool.(A)
3×4 BitArray{2}:
 0  0  1  1
 0  1  1  0
 1  0  1  0

julia> B_bool = Bool.(B)
3×4 BitArray{2}:
 1  1  1  0
 0  1  1  1
 0  1  1  1

类似地使用 .&| 运算符上广播以获得您想要的内容:

julia> A_bool .| B_bool
3×4 BitArray{2}:
 1  1  1  1
 0  1  1  1
 1  1  1  1

julia> A_bool .& B_bool
3×4 BitArray{2}:
 0  0  1  0
 0  1  1  0
 0  0  1  0

请注意,在这种特殊情况下,在原始矩阵上使用 |& 会得到等效的结果(但矩阵将包含 0-1 整数):

julia> A .| B
3×4 Array{Int64,2}:
 1  1  1  1
 0  1  1  1
 1  1  1  1

julia> A .& B
3×4 Array{Int64,2}:
 0  0  1  0
 0  1  1  0
 0  0  1  0