Python 获取第一个数组的行与第二个数组的行匹配

Python 获取第一个数组的行与第二个数组的行匹配,python,numpy,vectorization,Python,Numpy,Vectorization,假设我有一个A形状(M,K)的数组和另一个B形状(N,K) B行是所有可能遇到的模式(因此每个模式都是大小为K的1D数组) 因此,我想得到一个形状为(M,)的数组C,其中C[I]是A行I的模式(在B中)的标识 我目前正在循环(即循环所有可能的模式)中执行此操作,但最终将使用矢量化 以下是一个例子: A = np.array([[0, 1], [0, 1], [1, 0]]) B = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) 我期待着: C = np.

假设我有一个
A
形状
(M,K)
的数组和另一个
B
形状
(N,K)

B
行是所有可能遇到的模式(因此每个模式都是大小为
K
的1D数组)

因此,我想得到一个形状为
(M,)
的数组
C
,其中
C[I]
A
I
的模式(在
B
中)的标识

我目前正在循环(即循环所有可能的模式)中执行此操作,但最终将使用矢量化

以下是一个例子:

A = np.array([[0, 1], [0, 1], [1, 0]])
B = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
我期待着:

C = np.array([1, 1, 2])
基于,这里有一个矢量化的解决方案,使用-

样本运行-

In [43]: A
Out[43]: 
array([[72, 89, 75],
       [72, 89, 75],
       [93, 38, 61],
       [47, 67, 50],
       [47, 67, 50],
       [93, 38, 61],
       [72, 89, 75]])

In [44]: B
Out[44]: 
array([[47, 67, 50],
       [93, 38, 61],
       [41, 55, 27],
       [72, 89, 75]])

In [45]: out
Out[45]: array([3, 3, 1, 0, 0, 1, 3])
In [43]: A
Out[43]: 
array([[72, 89, 75],
       [72, 89, 75],
       [93, 38, 61],
       [47, 67, 50],
       [47, 67, 50],
       [93, 38, 61],
       [72, 89, 75]])

In [44]: B
Out[44]: 
array([[47, 67, 50],
       [93, 38, 61],
       [41, 55, 27],
       [72, 89, 75]])

In [45]: out
Out[45]: array([3, 3, 1, 0, 0, 1, 3])