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

基于NumPy/Python的简短模拟:含NaN数组的simu函数应用问题

解决方法:逐行应用自定义函数到NumPy数组

要把你的simu函数应用到NumPy数组的每一行,我们可以用NumPy的np.apply_along_axis函数实现逐行处理,同时还能优化原函数的NaN判断逻辑,让代码可读性更高。

步骤1:优化自定义函数

原函数通过np.sum(d)是否为NaN间接判断行内是否存在缺失值,我们可以直接检查行内的NaN情况,逻辑更直观:

import numpy as np

def simu(d):
    # 直接检查当前行是否包含NaN值
    if not np.isnan(d).any():
        # 计算三个指定区间的均值(注意NumPy切片是左闭右开)
        a = d[1:4].mean()  # 取索引1-3的元素求均值
        b = d[3:6].mean()  # 取索引3-5的元素求均值
        c = d[6:9].mean()  # 取索引6-8的元素求均值
        res = [[a, b, c]]
    else:
        res = 'error'
    return res

步骤2:定义目标数组

data = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9], 
                 [1, 2, 3, 4, 5, 6, np.nan, np.nan, np.nan], 
                 [4, 3, 5, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]])

步骤3:逐行应用函数

使用np.apply_along_axis,指定axis=1表示沿着行的方向处理(每一行作为参数传入simu函数):

results = np.apply_along_axis(simu, axis=1, arr=data)
print(results)

最终输出

运行代码后会得到如下结果:

[[list([3.0, 5.0, 8.0])]
 ['error']
 ['error']]

第一行无缺失值,成功计算出三个区间的均值;第二、三行包含NaN,因此返回error。

如果需要结果格式更统一(比如所有结果都返回数组类型),可以把else分支的返回值改成[[np.nan, np.nan, np.nan]],这样后续处理会更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:51:45