删除两个不同数组中相等的行

Remove rows equal in two different arrays

我有两个 numpy 数组,A 和 B,其中 A 大于 B。

A = [ 1 0 0, 2 0 0, 3 0 0, 4 0 0, 5 0 0]
B = [ 2 0 0, 5 0 0]

我需要创建另一个数组 C,它包含 A 中的所有行,但 B 中包含的行除外:

C = [1 0 0, 3 0 0, 4 0 0]

我该怎么做?

如果您不关心顺序并且您的数组不包含重复项,您可以执行以下操作。

A = [100, 200, 300, 400, 500]
B = [200, 500]

C = list(set(A) - set(B))

否则,您可以遍历 A 并排除 B 中存在的所有项目。我创建了 set_b,因为它可以更快地检查集合中是否存在某些内容。

A = [100, 200, 300, 400, 500]
B = [200, 500]
set_b = set(B)

C = [item for item in A if item not in set_b]
C = np.array([x for x in A if x not in B])

顺便说一句,我不太明白数字之间的空格。

您可以使用 in1d:

import numpy as np

a = np.array([[1,0,0], [2,0,0], [3,0,0], [4,0,0], [5,0,0]])
b = np.array([[2,0,0],[5,0,0]])
c = a[~np.in1d(a[:,0].astype(int), b)]
print(c)

输出:

[[1 0 0]
 [3 0 0]
 [4 0 0]]