我需要将“非”运算符应用于 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/

10-11 22:39
查看更多