In [41]: # Setup input arrays and force some indices to be same between A and B
...: nA = 4
...: nB = 5
...: x = 3
...: y = 2
...:
...: A = np.random.randint(0,9,(nA,x,y))
...: B = np.random.randint(0,9,(nB,x,y))
...:
...: A[2,:,:] = B[1,:,:]
...: A[3,:,:] = B[4,:,:]
...:
In [42]: mask = ((A[:,None,:,:] == B).all(2)).all(2)
...: A_idx,B_idx = np.where(mask)
...:
In [43]: A_idx, B_idx
Out[43]: (array([2, 3]), array([1, 4]))
In [44]: mask = (A.reshape(A.shape[0],1,-1) == B.reshape(B.shape[0],-1)).all(-1)
...: A_idx,B_idx = np.where(mask)
...:
In [45]: A_idx, B_idx
Out[45]: (array([2, 3]), array([1, 4]))
您应该只需要遍历其中一个数组,因为在这之后您将找不到任何额外的唯一子数组,并且您可以通过简单的列表理解来实现这一点。在
如果只需要索引而不是存储整个子阵列,可以执行以下操作:
^{pr2}$您可以将^{} 用于矢量化解决方案,如-
您可以使用^{} 来避免
^{pr2}$.all()
的双重用法并获得掩码,如下-样本运行-
利用Steven Rouk的解,这里有一种方法来获得相等的子数组的指数:
相关问题 更多 >
编程相关推荐