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

如何用Numpy掩码过滤掉值4出现在索引10及之前的数组行

使用Numpy掩码过滤指定条件的行

需求说明

过滤掉数组中值4出现在索引0~10范围内的行,保留以下两类行:

  • 行中没有值4
  • 值4出现在索引10之后的位置

实现步骤

1. 构造示例数组(模拟问题中的输入)

import numpy as np

# 构造包含不同位置4的示例数组
arr = np.array([
    [1, 4, 33, 28, 9, 22, 5, 6, 7, 8, 9, 10],  # 4在索引1(需过滤)
    [3, 11, 1, 25, 45, 14, 4, 5, 6, 7, 8, 9],   # 4在索引6(需过滤)
    [3, 11, 1, 21, 23, 5, 6, 7, 8, 9, 10, 4],   # 4在索引11(需保留)
    [20, 6, 27, 43, 15, 14, 5, 6, 7, 8, 9, 10], # 无4(需保留)
    [27, 6, 39, 37, 17, 2, 3, 4, 5, 6, 7, 8],   # 4在索引7(需过滤)
    [3, 11, 8, 27, 35, 32, 5, 6, 7, 8, 9, 4]    # 4在索引11(需保留)
], dtype=np.int32)

2. 生成过滤掩码并应用

# 生成掩码:前11个元素(索引0-10)不含4的行标记为True(保留)
mask = ~(arr[:, :11] == 4).any(axis=1)

# 应用掩码得到过滤后的数组
filtered_arr = arr[mask]

代码解释

  • arr[:, :11]:提取每行的前11个元素(对应索引0到10的范围)
  • (arr[:, :11] == 4):生成布尔数组,标记前11个元素中等于4的位置
  • .any(axis=1):按行聚合判断,只要该行前11个元素存在4,返回True(表示需要过滤)
  • ~:对结果取反,得到保留行的掩码:前11个元素无4 → True,有4 → False

验证结果

运行以下代码查看过滤后的数组:

print(filtered_arr)

输出:

[[ 3 11  1 21 23  5  6  7  8  9 10  4]
 [20  6 27 43 15 14  5  6  7  8  9 10]
 [ 3 11  8 27 35 32  5  6  7  8  9  4]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:13:20