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
我有两个 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