Julia布尔数组逐元素操作:寻找arr1真且arr2假的可行直观语法
答案
当然有更直观的Julia写法啦!你只需要给取反操作符!加上广播点(.),就能实现你想要的逻辑:
arr1 .& .!arr2
为什么这个写法可行?
在Julia中,!是标量取反操作符,默认只作用于单个布尔值。如果要对整个数组进行逐元素取反,需要用广播版本的取反操作符.!。这样一来,.!arr2会生成一个和arr2长度相同的数组,其中每个元素都是原arr2对应元素的取反结果。
然后再用广播版的按位与操作符.&,把arr1和取反后的arr2逐元素进行“且”运算,正好符合你需求的逻辑:当arr1对应元素为true且arr2对应元素为false时,结果为true。
完整示例验证
我们用你给出的数组测试一下:
arr1 = [true, false, true, true, true, false] arr2 = [true, false, false, true, false, true] result = arr1 .& .!arr2 # 输出结果:[false, false, true, false, true, false]
这个结果和你用算术方式convert(Array{Bool}, (arr1 .* (1 .- arr2)))得到的结果完全一致,但可读性明显更高,完全贴合你想要的直观逻辑。
另外,你也可以把取反部分用括号括起来,写法更清晰:
arr1 .& (.!arr2)
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

