查找二维数组中首个非全NaN行的行索引
解决方案
可以通过以下步骤快速找到首个包含实数的行号:
- 先判断每行是否存在非NaN元素:利用
~np.isnan(m)标记所有实数的位置,再通过np.any(axis=1)检查每行是否至少有一个实数,得到一个布尔数组。 - 用
np.argmax()获取布尔数组中第一个True的索引,这个索引就是目标行号。
完整代码示例
import numpy as np m = np.array([[np.nan, np.nan, np.nan], [np.nan, np.nan, np.nan], [np.nan, 17, np.nan],[np.nan, 18, 25]]) # 生成每行是否包含实数的布尔数组 has_real = np.any(~np.isnan(m), axis=1) # 获取首个包含实数的行号 first_row_idx = np.argmax(has_real) print(first_row_idx) # 输出:2
代码说明
~np.isnan(m):将数组中的非NaN元素转为True,NaN转为False。np.any(axis=1):按行判断,只要该行有一个True(即存在实数),就返回True,否则返回False。np.argmax(has_real):布尔数组中True等价于1,False等价于0,argmax会返回第一个最大值(也就是第一个True)的索引,正好是我们需要的首个含实数的行号。
内容的提问来源于stack exchange,提问作者tibibou
相关产品推荐
相关产品推荐

