首页 > 解决方案 > 如何将 not 运算符应用于 Julia 中的所有矩阵元素?

问题描述

我需要将“非”运算符应用于 Julia 中的零和一矩阵。在 Matlab 中,我会这样做:

A=not(B);

在 Julia 我尝试这样做:

A = .~ B;

A = .! B;

它应该将零变为一,将一变为零,但结果我得到错误,或者所有矩阵元素都是一些我没有输入的负数。提前致谢!

标签: matrixjulianegate

解决方案


问题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

这里的关键部分是 a 的元素类型 ( eltype)BitArrayBool,它的否定显然是很好定义的。从这个意义上说,您还可以使用B = Bool.(A)将所有元素转换为布尔值。


推荐阅读