进近#1:
views
(将每一行视为一个元素,每个元素都具有扩展的数据类型)-
# https://stackoverflow.com/a/45313353/ @Divakar
def view1D(a, b): # a, b are arrays
a = np.ascontiguousarray(a)
b = np.ascontiguousarray(b)
void_dt = np.dtype((np.void, a.dtype.itemsize * a.shape[1]))
return a.view(void_dt).ravel(), b.view(void_dt).ravel()
a1D,l1D = view1D(a,l)
out = a[np.in1d(a1D,l1D,invert=True)]
如果您只需要在输出中有唯一的行
set
np.unique
在获得的输出上-
np.unique(out,axis=0)
In [72]: a
Out[72]:
array([[1, 2],
[0, 0],
[0, 0]])
In [73]: l
Out[73]: [(1, 2), (3, 4)]
In [74]: out
Out[74]:
array([[0, 0],
[0, 0]])
In [75]: np.unique(out,axis=0)
Out[75]: array([[0, 0]])
进近#2:
使用相同的降维哲学,这里的矩阵乘法特定于
int
l = np.asarray(l)
shp = np.maximum(a.max(0)+1,l.max(0)+1)
s = np.r_[shp[::-1].cumprod()[::-1][1:],1]
l1D = l.dot(s)
a1D = a.dot(s)
l1Ds = np.sort(l1D)
out = a[l1D[np.searchsorted(l1Ds,a1D)] != a1D]