NumPy中ndarray第三维度全元素一致判定的代码修正问询
问题分析与解决
原代码的逻辑完全不符合需求,问题出在这两点:
array.all(axis=2)是检查每个[i,j]对应的第三维度所有元素是否全为非零(numpy里非零元素会被视为布尔值True)- 后续和
0比较时,布尔值True等价于1、False等价于0,所以array.all(axis=2) == 0实际是判断第三维度是否存在至少一个零元素,这和你要的“第三维度所有元素为同一值(比如全零)”完全不符。
针对“全零”的判断
如果你需要判断每个[i,j]位置第三维度是否全为0,正确代码如下:
import numpy as np # 生成测试数组,可手动设置部分位置第三维全零用于验证 array = np.random.randint(0, 75, size=(1200, 2600, 200)) array[0:10, 0:10, :] = 0 # 先将数组元素与0比较,再沿第三维度判断是否全匹配 logical = (array == 0).all(axis=2)
针对“所有元素为任意同一值”的判断
如果你的需求是判断每个[i,j]位置第三维度的元素是否全部相同(不管具体值是0还是其他),可以用以下代码:
# 比较第三维度每个元素与该维度第一个元素是否相等,再判断是否全匹配 logical = (array == array[..., 0:1]).all(axis=2)
这里array[..., 0:1]会保持维度为(1200,2600,1),和原数组广播后逐元素比较,最后沿第三维度取all,就能得到每个位置第三维度是否所有元素一致的结果。
内容的提问来源于stack exchange,提问作者TornadoEric
相关产品推荐
相关产品推荐

