You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取二维Numpy数组每行的最后一个非空值?

提取二维NumPy数组每行最后一个非NaN值的实现方法

这里提供两种实用的实现方式,针对你的数组需求可以直接套用:

方法一:利用NumPy向量化操作(高效处理大数组)

通过布尔索引和反向查找定位每行最后一个非NaN值的位置,再提取对应元素:

import numpy as np

a = np.array(
    [
        [1,2,np.nan,np.nan],
        [1,33,45,np.nan],
        [11,22,3,78],
    ]
)

# 生成标记非NaN元素的布尔矩阵
non_nan_mask = ~np.isnan(a)
# 反转每行的布尔序列,用argmax找到第一个True的位置(对应原数组最后一个非NaN的位置)
last_idx = non_nan_mask.shape[1] - 1 - np.argmax(non_nan_mask[:, ::-1], axis=1)
# 根据行索引和元素位置提取结果
result = a[np.arange(a.shape[0]), last_idx]
print(result)  # 输出:[ 2. 45. 78.]

注意:如果存在全为NaN的行,argmax会返回0,导致提取最后一个位置的NaN,可根据需求添加判断逻辑处理这种情况。

方法二:自定义函数结合apply_along_axis(逻辑直观)

通过自定义函数过滤每行的NaN值,直接取最后一个有效元素:

import numpy as np

a = np.array(
    [
        [1,2,np.nan,np.nan],
        [1,33,45,np.nan],
        [11,22,3,78],
    ]
)

def extract_last_non_nan(row):
    # 过滤当前行的NaN值
    valid_vals = row[~np.isnan(row)]
    # 返回最后一个有效元素,全NaN时返回NaN(可根据需求修改)
    return valid_vals[-1] if len(valid_vals) > 0 else np.nan

# 沿行方向应用自定义函数
result = np.apply_along_axis(extract_last_non_nan, axis=1, arr=a)
print(result)  # 输出:[ 2. 45. 78.]

内容的提问来源于stack exchange,提问作者vvv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:20:32