np.where返回索引不符合预期:如何定位二维数组含非正数值的行?
问题分析与解决
你误解了np.where对二维数组的返回结果含义:
np.where(data_import == 0)返回的是两个数组组成的元组,第一个数组是所有符合条件元素的行索引,第二个是对应的列索引。你看到的(array([95]), array([2]))意思是:第95行、第2列的位置有一个0,完全和第2行没关系——是你主动打印第2行的操作,才造成了误解。
正确定位包含<=0元素的行的方法
要找出所有包含至少一个小于等于0元素的行,需要先对每行做整体判断,再提取行索引:
import numpy as np # 生成每行是否存在<=0元素的布尔数组(axis=1表示按行判断) has_invalid = np.any(data_import <= 0, axis=1) # 获取符合条件的行索引 target_rows = np.where(has_invalid)[0] # 打印这些行的索引 print(target_rows) # 直接提取这些行的数据 print(data_import[target_rows])
在你的例子中,这段代码会返回[95],也就是只有第95行符合条件,和你预期的一致。
内容的提问来源于stack exchange,提问作者FieryAl52
相关产品推荐
相关产品推荐

