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

如何在NumPy中基于非NaN值合并两个数组得到目标数组

在NumPy中基于非NaN值合并两个数组的方法

需求是将形状为(r, c)的数组1(含NaN和非NaN值)与形状为(r, 2)的数组2合并,把数组2的每行值替换到数组1对应行的非NaN位置,得到同形状的结果数组。

实现思路

  1. 定位数组1中所有非NaN元素的位置索引;
  2. 复制数组1作为结果的基础;
  3. 将数组2的展平值按索引替换到结果数组的对应位置。

代码示例

import numpy as np

# 模拟输入数组
arr1 = np.array([
    [np.nan,  1.,  1., np.nan, np.nan, np.nan],
    [np.nan, np.nan, np.nan,  1.,  1., np.nan],
    [np.nan, np.nan,  1.,  1., np.nan, np.nan],
    [np.nan, np.nan, np.nan,  1.,  1., np.nan],
    [np.nan, np.nan, np.nan,  1.,  1., np.nan],
    [np.nan, np.nan,  1.,  1., np.nan, np.nan]
])

arr2 = np.array([
    [0.76620125, 59.14934823],
    [2.52819832, 43.63809538],
    [1.9656387 , 25.62212163],
    [2.55076928, 43.04276273],
    [2.62058763, 22.14260189],
    [1.8050997 , 51.72144285]
])

# 获取所有非NaN元素的行、列索引
row_indices, col_indices = np.where(~np.isnan(arr1))

# 初始化结果数组
result = arr1.copy()

# 将数组2的值替换到对应非NaN位置
result[row_indices, col_indices] = arr2.flatten()

# 输出结果
print(result)

代码说明

  • np.where(~np.isnan(arr1)):返回两组索引,分别对应数组1中非NaN元素的行号和列号,实现精准定位;
  • arr2.flatten():将二维的数组2转为一维,刚好匹配数组1中非NaN元素的总数量(每行2个,共r*2个);
  • 直接赋值操作会按顺序将数组2的元素填充到数组1的非NaN位置,得到目标结果。

该方法同样适用于数组1每行非NaN数量固定、且与数组2列数一致的其他场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:11:09