如何利用.all()和.any()获取目标数组在numpy数组列表中的索引?
如何用numpy的.all()和.any()获取目标数组在数组列表中的索引?
当然可以啦!其实你已经完成了最关键的一步——生成每行是否匹配的布尔掩码,接下来只需要结合np.where()就能轻松拿到目标数组的索引了,我来一步步给你演示:
首先回顾你的示例代码,你已经通过(t == t2).all(1)得到了标记匹配行的布尔数组:
import numpy as np t = np.array([[1,2,3], [4,5,6] , [7,8,9], [10, 11, 12]]) t2 = np.array([1,2,3]) # 生成每行是否与t2完全匹配的掩码 match_mask = (t == t2).all(1) print(match_mask) # 输出: [ True False False False]
接下来,我们可以用np.where()函数提取这个掩码中True对应的索引:
# 获取所有匹配行的索引 indices = np.where(match_mask)[0] print(indices) # 输出: [0]
补充说明:
np.where(match_mask)会返回一个元组,对于一维的掩码数组,元组的第一个元素就是所有匹配位置的索引数组;- 如果你的数组列表中有多个和
t2匹配的数组,这个方法会返回所有对应的索引。比如:t = np.array([[1,2,3], [4,5,6], [1,2,3], [10,11,12]]) match_mask = (t == t2).all(1) indices = np.where(match_mask)[0] print(indices) # 输出: [0 2] - 如果你想先确认是否存在匹配项,可以继续用你之前的
match_mask.any()判断,再去获取索引,避免出现索引为空的情况。
内容的提问来源于stack exchange,提问作者jameshwart lopez
相关产品推荐
相关产品推荐

