我需要将“非”运算符应用于 Julia 中的零和一矩阵。
在 Matlab 中,我会这样做:
A=not(B);
在 Julia 我尝试这样做:
A = .~ B;
和
A = .! B;
它应该将零变为 1,将 1 变为零,但结果我得到错误,或者所有矩阵元素都是一些我没有输入的负数。
提前致谢!
最佳答案
A = .!B
的问题在于逻辑否定 !(::Int64)
不是为整数定义的。这是有道理的:比如说,!3
应该合理地给出什么?
既然您要执行逻辑运算,那么开始使用整数是否有更深层次的原因?
您也许可以使用 BitArray
来代替它,这会更有效率,并且在大多数操作中应该表现得像常规 Array
。
您可以轻松地将整数矩阵转换为 BitArray
。之后,应用逻辑无法按预期工作。
julia> A = rand(0:1, 5,5)
5×5 Array{Int64,2}:
0 0 0 1 1
0 1 0 0 1
0 1 1 1 0
1 1 0 0 0
1 1 1 0 0
julia> B = BitArray(A)
5×5 BitArray{2}:
0 0 0 1 1
0 1 0 0 1
0 1 1 1 0
1 1 0 0 0
1 1 1 0 0
julia> .!B
5×5 BitArray{2}:
1 1 1 0 0
1 0 1 1 0
1 0 0 0 1
0 0 1 1 1
0 0 0 1 1
这里的关键部分是
eltype
的元素类型( BitArray
)是 Bool
,对于它的否定显然是明确定义的。从这个意义上说,您还可以使用 B = Bool.(A)
将所有元素转换为 bool 值。关于matrix - 如何将 not 运算符应用于 Julia 中的所有矩阵元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58594203/