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

如何使用Numpy标记并获取包含指定值的数组行索引?

如何找出NumPy数组中包含指定值的行并获取行号

当然可以实现,方法很直接,不用纠结numpy.mask,用np.isin配合行级判断就能搞定。下面是具体步骤和代码:

1. 把数据转换成NumPy数组

先将你给出的两组数据转成NumPy数组:

import numpy as np

# 第一个数组
arr1 = np.array([
    [247, 656, 6363],
    [13822, 13818, 30054],
    [10174, 25484, 6553],
    [6107, 2927, 6578],
    [2904, 6462, 3941],
    [16562, 8692, 16563],
    [25182, 6681, 25181],
    [6679, 6429, 3841]
])

# 需要检查的目标值数组
values_to_check = np.array([13822, 13818, 2927, 8692, 3841])

2. 生成行掩码并获取目标行号

用np.isin检查arr1中的每个元素是否在values_to_check里,再用any(axis=1)判断每一行是否有至少一个元素匹配,得到的布尔数组就是行掩码:

# 生成掩码:每行如果有元素在目标值里,就为True
row_mask = np.isin(arr1, values_to_check).any(axis=1)

# 获取符合条件的行号(NumPy行号从0开始)
target_row_indices = np.where(row_mask)[0]
print("符合条件的行号:", target_row_indices)
# 输出:符合条件的行号: [1 3 5 7]

3. 获取对应的行数据

直接用掩码索引arr1就能拿到包含目标值的行:

target_rows = arr1[row_mask]
print("包含目标值的行:")
print(target_rows)

输出结果:

[[13822 13818 30054]
 [ 6107  2927  6578]
 [16562  8692 16563]
 [ 6679  6429  3841]]

4. 删除这些行

如果要删除目标行,直接取掩码的反值即可:

# 删除目标行后的新数组
filtered_arr = arr1[~row_mask]
print("删除目标行后的数组:")
print(filtered_arr)

输出:

[[  247   656  6363]
 [10174 25484  6553]
 [ 2904  6462  3941]
 [25182  6681 25181]]

关于numpy.mask的问题

你提到的numpy.mask应该是指掩码数组(np.ma.MaskedArray),其实上面的方法本质也是用掩码逻辑,只是更直接。如果用掩码数组也能实现,但没必要绕路,上面的方法更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:07:14