Julia中逻辑数组(BitArray等)取补操作失败问题咨询
Julia逻辑/位数组取补操作的正确方式
你遇到的问题核心是混淆了逻辑非和位取补的运算符,以及Julia数组操作的广播语法要求:
1. 布尔数组(Matrix{Bool})与BitArray
这两种类型的元素是Bool逻辑值,对应的取补是逻辑非,而非位运算。Julia中逻辑非的标量运算符是!,要作用到数组的每个元素,需要用广播语法(加.):
# Matrix{Bool}取补 bool_mat = [true false; false true] neg_bool = .!bool_mat # BitArray取补 bit_mat = BitMatrix([true false; false true]) neg_bit = .!bit_mat
2. Int8等整数数组
手册提到的~支持原始整数类型,指的是标量整数。要对整数数组逐元素做位取补,同样需要广播语法(给运算符加.):
int8_arr = Int8[1 0; 0 1] neg_int8 = .~int8_arr
关键原因
- Julia的运算符默认是针对标量设计的,数组的逐元素操作必须通过广播(
.前缀)实现,直接用~或!会因为没有对应数组级别的方法而报错。 Bool类型在Julia中是逻辑类型,不是整数类型,因此逻辑取补用!,而位运算~只针对整数类型生效。
内容的提问来源于stack exchange,提问作者kordes
相关产品推荐
相关产品推荐

