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

如何将列表元素按顺序替换numpy数组中非np.nan的元素

实现方案

直接使用numpy的布尔索引做向量化赋值即可,全程无显式循环,适配任意维度的数组和动态长度的匹配序列:

首先导入numpy并准备原始数据:

import numpy as np

a = [1, 2, 3, 4, 5]
b = np.array([[np.nan, 10, np.nan], 
              [11,     12,     13], 
              [np.nan, 14, np.nan]])

核心实现代码:

# 复制原数组避免修改原始数据,不需要保留原数组可直接操作b
c = b.copy()
# 给所有非nan位置按行优先顺序赋值a的元素
c[~np.isnan(c)] = a

执行后c的输出结果与需求完全一致:

array([[nan,  1., nan],
       [ 2.,  3.,  4.],
       [nan,  5., nan]])

原理解释

  • ~np.isnan(c) 会生成和c形状一致的布尔掩码,非nan位置为True,nan位置为False
  • numpy对布尔索引的赋值默认按**行优先(C风格顺序)**匹配右侧序列的元素,正好符合按顺序填充非nan位置的要求
  • 该方案为纯向量化操作,性能远高于循环写法,只要保证a的长度和b中非nan元素数量一致,无论b的维度、a的长度如何变化都可以直接使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:45:05