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

如何高效替换矩阵中除含特定值的行/列外所有值为np.nan?

功能需求

我们需要实现的功能为:将输入矩阵X中除包含指定值v的行和列外,其余所有元素替换为np.nan,参考代码框架、输入示例与预期输出如下:

参考代码框架

import numpy as np
from numpy.typing import NDArray 


def get_masked_array(X: NDArray[float], v: float) -> NDArray[float]:
     # 待实现逻辑
     return arr
    

# 输入示例浮点数组
X = np.array([[ 1.,  2.,  2.,  3.,  3.],
              [ 1.,  2.,  2.,  4.,  4.],
              [ 5.,  5.,  6.,  6.,  6.],
              [ 7.,  8.,  9.,  9.,  9.],
              [10., 10., 10., 10., 10.]])

预期输出结果

>>> get_masked_array(X, 2.)
array([[ 1.,  2.,  2.,  3.,  3.],
       [ 1.,  2.,  2.,  4.,  4.],
       [nan,  5.,  6., nan, nan],
       [nan,  8.,  9., nan, nan],
       [nan, 10., 10., nan, nan]])

>>> get_masked_array(X, 3.)
array([[ 1.,  2.,  2.,  3.,  3.],
       [nan, nan, nan,  4.,  4.],
       [nan, nan, nan,  6.,  6.],
       [nan, nan, nan,  9.,  9.],
       [nan, nan, nan, 10., 10.]])
实现方案

通过numpy布尔索引定位需要保留的行和列,其余位置赋值为np.nan即可,实现代码如下:

import numpy as np
from numpy.typing import NDArray 


def get_masked_array(X: NDArray[float], v: float) -> NDArray[float]:
    arr = X.copy()
    # 筛选所有包含指定值v的行索引
    keep_rows = (arr == v).any(axis=1)
    # 筛选所有包含指定值v的列索引
    keep_cols = (arr == v).any(axis=0)
    # 构建掩码:既不在保留行也不在保留列的位置需要设为nan
    mask = ~keep_rows[:, np.newaxis] & ~keep_cols
    arr[mask] = np.nan
    return arr

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:36:00