删除两个不同数组中相等的行
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]]
我有两个 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]]