如何无循环获取与目标一维数组逐元素匹配的二维数组行的一维布尔数组?
无循环实现行匹配的一维布尔数组方案
可以通过以下几种方式,在不使用循环的前提下得到目标一维布尔数组:
方法一:逐元素比较后按行取逻辑与
这是最直接的写法:
(arr == guess).all(axis=1)
原代码arr == guess会对每个元素逐一比较,生成N行2列的二维布尔数组;调用all(axis=1)后,会检查每行的所有元素是否都为True,最终返回长度为N的一维布尔数组,其中仅第50个元素为True(对应arr[50]与guess完全匹配)。
方法二:使用np.isclose兼容近似匹配(整数场景同样适用)
如果后续需要处理浮点数的近似匹配需求,或者想让代码更通用,可以用np.isclose替代直接比较:
np.isclose(arr, guess).all(axis=1)
对于整数的精确匹配场景,这个写法的结果和方法一完全一致。
方法三:广播后逐行验证(进阶写法)
通过np.newaxis给guess增加一个维度,让它能和arr进行广播匹配,再逐行验证:
np.all(arr == guess[np.newaxis, :], axis=1)
guess[np.newaxis, :]将一维的guess转换为1行2列的二维数组,广播后与arr形状一致,再通过np.all按行取逻辑与得到结果。
内容的提问来源于stack exchange,提问作者gboffi
相关产品推荐
相关产品推荐

