a = np.array([1, 2, 3])
b = np.array([4, 2, 3, 1, 0])
c = np.setdiff1d(b, a)
print("c", c)
结果是c [0, 4]
,但我想要的答案是c [4 0]
。
我该怎么做?
答案 0 :(得分:2)
使用np.in1d
获取不匹配的掩码,并将{boolean-index简单地添加到b
中以保留其中元素的顺序 -
b[~np.in1d(b,a)]
逐步运行示例 -
In [14]: a
Out[14]: array([1, 2, 3])
In [15]: b
Out[15]: array([4, 2, 3, 1, 0])
In [16]: ~np.in1d(b,a)
Out[16]: array([ True, False, False, False, True], dtype=bool)
In [17]: b[~np.in1d(b,a)]
Out[17]: array([4, 0])
答案 1 :(得分:2)
如果您希望c
1)b
的元素不在a
和2},则它们的顺序与{{1}中的顺序相同你可以使用列表理解:
b
setdiff1d将数组视为集合,因此:1)不尊重元素的顺序,2)任何多次出现的元素被视为只存在一次。例如这段代码:
c = np.array([el for el in b if el not in a])
将产生
a = np.array([4])
b = np.array([2, 4, 2, 1, 1])
c = np.setdiff1d(b, a)
print(c)