为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查一个数组是否包含另一个数组的所有元素?

如何检查一个数组是否包含另一个数组的所有元素?

拉风的咖菲猫 2023-08-22 17:15:18
我需要检查数组 A 是否包含另一个数组 B 的所有元素。如果不包含,则输出缺少的元素。A和B都是整数,B总是从0到N,间隔为1。import numpy as np A=np.array([1,2,3,6,7,8,9]) B=np.arange(10)我知道我可以使用以下内容来检查是否有任何丢失的元素,但它没有给出丢失元素的索引。np.all(elem in A  for elem in B)python中有没有一种好方法来输出缺失元素的索引?
查看完整描述

3 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

IIUC 您可以尝试以下操作并假设 B 始终是“索引”列表:


[i for i in B if i not in A]

输出将是:[0,4,5]


使用 numpy 做到这一点的最佳方法

Numpy 实际上有一个函数可以执行此操作:numpy.insetdiff1d


np.setdiff1d(B, A)


# Which returns

array([0, 4, 5])


查看完整回答
反对 回复 2023-08-22
?
守候你守候我

TA贡献1802条经验 获得超10个赞

您可以使用enumerate来获取列表的索引和内容。下面的代码会做你想要的

    idx = [idx for idx, element in enumerate(B) if element not in A]


查看完整回答
反对 回复 2023-08-22
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

我假设我们想要获得B, 与 相比时独有的元素A。


方法#1


鉴于 的具体情况 B is always from 0 to N with an interval of 1,我们可以使用一个简单的基于掩码的 -


mask = np.ones(len(B), dtype=bool)

mask[A] = False

out = B[mask]

方法#2


另一种B可以编辑并且内存效率更高的方法 -


B[A] = -1

out = B[B>=0]

方法#3


更通用的整数情况可以用不同的方式处理 -


def setdiff_for_ints(B, A):

    N = max(B.max(), A.max()) - min(min(A.min(),B.min()),0) + 1

    mask = np.zeros(N, dtype=bool)

    mask[B] = True

    mask[A] = False

    out = np.flatnonzero(mask)

    return out

样本运行 -


In [77]: A

Out[77]: array([ 1,  2,  3,  6,  7,  8, -6])


In [78]: B

Out[78]: array([1, 3, 4, 5, 7, 9])


In [79]: setdiff_for_ints(B, A)

Out[79]: array([4, 5, 9])


# Using np.setdiff1d to verify :

In [80]: np.setdiff1d(B, A)

Out[80]: array([4, 5, 9])

时间安排 -


In [81]: np.random.seed(0)

    ...: A = np.unique(np.random.randint(-10000,100000,1000000))

    ...: B = np.unique(np.random.randint(0,100000,1000000))


# @Hugolmn's soln with np.setdiff1d

In [82]: %timeit np.setdiff1d(B, A)

4.78 ms ± 96.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)


In [83]: %timeit setdiff_for_ints(B, A)

599 µs ± 6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)


查看完整回答
反对 回复 2023-08-22
  • 3 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信