Jos*_*ath 2 python logic boolean julia
我有两个 1 和 0 的 nxm 矩阵(称为 A 和 B)。我想将它们转换为布尔变量,然后对它们应用“和”和“或”操作。在python中,这很容易:
A = np.array(A, dtype=bool)
B = np.array(B, dtype=bool)
A | B
A & B
Run Code Online (Sandbox Code Playgroud)
但是,我想在 Julia 中做同样的事情,但我遇到了一些问题。我首先通过
A = convert(Array{Bool}, A)
B = convert(Array{Bool},B)
Run Code Online (Sandbox Code Playgroud)
但后来我做了 A&B,我明白了
TypeError: non-boolean (Array{Bool,2}) used in boolean context
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我们首先创建存储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
Run Code Online (Sandbox Code Playgroud)
然后,使用广播.的 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
Run Code Online (Sandbox Code Playgroud)
同样使用.广播&和|运算符来获得你想要的:
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
Run Code Online (Sandbox Code Playgroud)
请注意,在这种特殊情况下|,&在原始矩阵上使用和将获得等效结果(但矩阵将包含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
Run Code Online (Sandbox Code Playgroud)