如何在Python中无循环将布尔矩阵的True设为255、False设为0
解决Numpy布尔数组转整数数组的问题
你的问题核心是:布尔类型的Numpy数组无法存储整数值,赋值时会自动将非0值转为True,0转为False,所以输出还是布尔数组。以下是几种无循环的解决方案:
方法1:直接利用布尔值的数值特性(最简洁)
Numpy中布尔值True等价于1,False等价于0,直接乘以255会自动将数组类型转为整数:
import numpy as np mat1 = np.random.randint(0, 255, size=(1000,1000)) mat2 = np.random.randint(0, 255, size=(1000,1000)) mat_compare = (mat1 == mat2) * 255
方法2:使用np.where(逻辑清晰)
通过np.where直接根据条件生成目标值:
mat_compare = np.where(mat1 == mat2, 255, 0)
方法3:先转换数组类型再赋值
先将布尔数组转为整数类型(比如uint8,适合0-255的范围),再进行赋值:
mat_compare = (mat1 == mat2).astype(np.uint8) mat_compare[mat_compare == 1] = 255
为什么原代码无效?
mat_compare = (mat1 == mat2)创建的是布尔类型数组,Numpy布尔数组的元素只能是True或False。当你赋值255时,会被自动转换为True;赋值0时转换为False,所以最终输出还是布尔数组。
内容的提问来源于stack exchange,提问作者The nd
相关产品推荐
相关产品推荐

