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

如何查找numpy数组中存在于另一数组中的行的索引

查找NumPy数组中匹配指定行的索引

方法1:集合+元组(直观易懂)

将arrlist的每一行转换为元组存入集合,再遍历rand_arr的行判断是否在集合中,收集对应索引:

import numpy as np

arrlist = np.array([[1,0,0,1] , [0,1,1,0]])
rand_arr = np.array([[1,0,0,1],[0,1,1,0],[1,1,1,0]])

# 把目标行转为元组集合
target_rows = set(tuple(row) for row in arrlist)
# 遍历收集匹配索引
matching_indices = [i for i, row in enumerate(rand_arr) if tuple(row) in target_rows]
# 转为NumPy数组输出
result = np.array(matching_indices)
print(result)  # 输出:[0 1]

方法2:NumPy广播匹配(纯向量运算)

利用广播特性让两行数组做元素级比较,判断每行是否完全匹配:

# 广播实现逐行全匹配判断:(N,1,4) 与 (M,4) 比较 → (N,M,4),再按维度2取全True
matches = (rand_arr[:, np.newaxis, :] == arrlist).all(axis=2)
# 提取存在匹配的行索引
matching_indices = np.where(matches.any(axis=1))[0]
print(matching_indices)  # 输出:[0 1]

方法3:视图转换+np.isin(高效处理大数据)

通过np.view将每行转为单个标量,再用np.isin快速匹配,适合大数量级场景:

# 转换视图:把每行4个int8元素转为一个int32标量(需保证元素类型+长度匹配对应整数类型)
arrlist_view = arrlist.view(np.int32).ravel()
rand_arr_view = rand_arr.view(np.int32).ravel()
# 查找匹配索引
matching_indices = np.where(np.isin(rand_arr_view, arrlist_view))[0]
print(matching_indices)  # 输出:[0 1]

注:视图转换需确保元素类型与行长度能对应到合法整数类型,比如4个int64元素无法直接转为标准整数类型,需根据实际情况调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:30:19