You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何用布尔掩码反转二进制NumPy数组指定元素?

针对你的需求,有两种简洁的Pythonic实现方式,完全避免自定义标量函数带来的问题:

方法1:直接通过索引赋值(最直观高效)

先复制原数组,再对掩码为True的位置执行翻转操作(利用二进制特性:1 - x即可实现0和1互换):

import numpy as np

arr = np.array([
    [0,0,1,1],
    [0,0,1,1],
    [0,0,1,1],
    [0,0,1,1]
])
mask = np.array([
    [True,False,True,False],
    [True,False,True,False],
    [True,False,True,False],
    [True,False,True,False]
])

arr_new = arr.copy()
arr_new[mask] = 1 - arr_new[mask]

运行后arr_new就是你期望的结果。

方法2:用np.where结合向量化运算

把原来的自定义函数替换成向量化的1 - arr,因为np.where支持直接传入数组作为参数,会自动逐元素处理:

arr_new = np.where(mask, 1 - arr, arr)

这个写法更紧凑,同样能得到正确结果。

为什么你的原代码报错?

你写的swap_cell函数是针对单个标量设计的,但调用时传入的是整个arr数组,导致x == 1.0返回一个布尔数组。而if语句无法直接判断数组的"真值"(numpy不知道你要判断数组中是否有任意元素为真,还是全部为真),所以抛出了ValueError。

内容的提问来源于stack exchange,提问作者gram_schmidt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:07:09