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

如何基于另一numpy数组的索引序列排序数组并保留nan位置不变

解决方案

实现代码

import numpy as np

# 输入数组
array1 = np.array([np.nan,np.nan,np.nan,np.nan,2,np.nan,1,np.nan,np.nan,5,np.nan,np.nan,6,np.nan,10,9,np.nan])
array2 = np.array([np.nan,np.nan,np.nan,np.nan,45,np.nan,33,np.nan,np.nan,32,np.nan,np.nan,44,np.nan,10,53,np.nan])

# 1. 提取非nan位置掩码,两个数组nan位置完全一致,直接复用array1的掩码
valid_mask = ~np.isnan(array1)
# 2. 按从左到右顺序获取所有非nan的索引位置,即需要填充的固定坑位
non_nan_pos = np.where(valid_mask)[0]
# 3. 获取array1升序排序后的有效元素对应原索引(过滤掉末尾的nan对应的索引)
sorted_valid_idx = np.argsort(array1)[:len(non_nan_pos)]
# 4. 初始化结果数组,填充排序后的值
result = np.full_like(array2, np.nan)
result[non_nan_pos] = array2[sorted_valid_idx]

print(result)

步骤说明

  • 核心逻辑是保留原数组的nan位置不变,只对非nan的有效位置做值的重映射
  • 先通过掩码筛选出所有需要填充值的固定位置
  • 用np.argsort(array1)拿到的排序索引提取出对应有效元素的位置
  • 将array2对应位置的值按顺序填充到固定的非nan坑位中即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:36:02