从两个numpy 2D数组中提取不同的行

从两个numpy 2D数组中提取不同的行,numpy,row,extract,Numpy,Row,Extract,我从矩阵a(100,40)生成了一个新的随机行矩阵B(50,40): 现在,我想取矩阵B中不存在的A中的行 C = A not in B # pseudocode. 这应该可以做到: import numpy as np A=np.random.randint(5,size=[100,40]) l=np.random.choice(100, size=50, replace=False) B = A[l] C= A[np.setdiff1d(np.arange(0,100),l)] l存

我从矩阵a(100,40)生成了一个新的随机行矩阵B(50,40):

现在,我想取矩阵B中不存在的A中的行

C = A not in B   # pseudocode.

这应该可以做到:

import numpy as np
A=np.random.randint(5,size=[100,40])
l=np.random.choice(100, size=50, replace=False)
B = A[l]
C= A[np.setdiff1d(np.arange(0,100),l)]
l
存储所选行,对于
C
则取
l
的补码。然后,
C
是所需的矩阵


注意,我设置了
l=np.random.choice(100,size=50,replace=False)
以避免替换。如果您使用
np.random.randint(0100,size=50)
您可能会得到重复的行,因为随机选择了相同的数字。

。首先获取B中存在的行的索引,然后获取整个A索引的差异。在末尾使用差分选择行

index = np.argwhere((B[:,None,:] == A[:,:]).all(-1))[:, 1]
C = A[np.setdiff1d(np.arange(100), index)]
该软件包(免责声明:我是它的作者)为所有这些类型的操作提供了高效的矢量化功能

import numpy_indexed as npi
C = npi.difference(A, B)

也许你的意思是:A=np.random.randint(5,size=[100,40])l=np.random.randint(0100,size=50)B=A[l]C=A[np.setdiff1d(np.arange(0100),l)]?如果你取l=np.random.randint(0100,size=50),那么l中的值可能相等。比如l=[1,1,2,3,…]。是否允许多次使用同一行?如果是,您确实可以将l切换到l=np.random.randint(0100,size=50)。如果没有,那么我的答案中的代码保证没有重复。
import numpy_indexed as npi
C = npi.difference(A, B)