如何在numpy数组中查找特定值的首个出现索引?
方法1:直接从np.where返回结果提取
np.where(condition)针对二维数组返回的长度为2的tuple规则如下:
- tuple的第一个元素是所有符合条件的元素的行索引数组
- tuple的第二个元素是所有符合条件的元素的列索引数组
两个数组相同下标位置的数值配对,就是一个符合条件的元素坐标,且坐标顺序默认按行优先(C顺序)遍历原数组的顺序排列,因此取下标为0的配对值就是第一个出现的0的位置:
import numpy as np # 示例数组,对应你(1000,6)的业务场景 arr = np.ones((1000, 6)) arr[2, 3] = 0 # 手动设置测试用0 arr[5, 1] = 0 zero_coords = np.where(arr == 0) if len(zero_coords[0]) > 0: # 取第一个0的行、列索引 first_zero_row = zero_coords[0][0] first_zero_col = zero_coords[1][0] print(f"第一个0的坐标:行{first_zero_row},列{first_zero_col}") else: print("数组中不存在0")
方法2:大数组场景下更高效的方案
np.where会遍历全数组找到所有符合条件的元素,如果你只需要第一个0的位置,用np.argmax可以在找到第一个匹配项后停止遍历,性能更好:
# 拉平数组后找第一个0的一维索引 flat_idx = np.argmax((arr == 0).ravel()) # 转换为二维坐标 row, col = np.unravel_index(flat_idx, arr.shape) # 额外判断是否真的存在0:如果全数组没有0,argmax会默认返回0下标 if arr[row, col] != 0: print("数组中不存在0") else: print(f"第一个0的坐标:行{row},列{col}")
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

