Python NumPy数组for循环判断元素布尔值异常如何修复
问题根因
你的循环边界设置错误,这是导致遍历元素不全的核心原因:
range()是左闭右开的取值规则,你写的range(row-1)、range(col-1)会直接漏掉最后一整行、最后一整列的元素- 以你的测试数组为例:数组shape为
(2,3),即row=2、col=3range(row-1)等价于range(1),只会取到行索引0,完全跳过第二行(索引1)range(col-1)等价于range(2),只会取到列索引0、1,完全跳过值为3所在的第三列(索引2)
最终循环只会执行2次,和你观察到的仅输出2个False的现象完全一致。
修正方案
去掉循环范围里的-1,直接用数组的行、列长度作为range的终止值即可,修正后的完整代码:
import numpy as np data = [[1,2,3],[4,5,6]] data = np.array(data) row, col = data.shape for i in range(row): for j in range(col): print(data[i][j] == 3)
运行后会按逐行从左到右的顺序输出6个布尔结果:
False False True False False False
补充提示:NumPy原生的向量化判断
data == 3底层是C实现,运行效率远高于手写Python for循环,处理大规模数组时优先使用向量化写法,不要手动写循环遍历。
内容的提问来源于stack exchange,提问作者EscobarNoble
相关产品推荐
相关产品推荐

