元芳怎么了
我假设我们想要获得B, 与 相比时独有的元素A。方法#1鉴于 的具体情况 B is always from 0 to N with an interval of 1,我们可以使用一个简单的基于掩码的 -mask = np.ones(len(B), dtype=bool)mask[A] = Falseout = B[mask]方法#2另一种B可以编辑并且内存效率更高的方法 -B[A] = -1out = 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]: AOut[77]: array([ 1, 2, 3, 6, 7, 8, -6])In [78]: BOut[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.setdiff1dIn [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)