从两个numpy 2D数组中提取不同的行
我从矩阵a(100,40)生成了一个新的随机行矩阵B(50,40): 现在,我想取矩阵B中不存在的A中的行从两个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存
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)