匹配行上的numpy数组

匹配行上的numpy数组,numpy,array-broadcasting,Numpy,Array Broadcasting,我有两个数组arr\u all和arr\u sub,通过构造,所有arr\u sub行都在arr\u all中。我正在寻找的输出是一个1D数组,大小为arr\u sub.shape[0],其索引为arr\u all,与arr\u all匹配。例如: arr_all = array([[35, 37], [ 6, 38], [48, 32], [16, 39], [32, 20]]) arr_sub = array([[ 6, 38], [16, 39]]) required output: ar

我有两个数组
arr\u all
arr\u sub
,通过构造,所有
arr\u sub
行都在
arr\u all
中。我正在寻找的输出是一个1D数组,大小为
arr\u sub.shape[0]
,其索引为
arr\u all
,与
arr\u all
匹配。例如:

arr_all = array([[35, 37], [ 6, 38], [48, 32], [16, 39], [32, 20]])
arr_sub = array([[ 6, 38], [16, 39]])
required output: array([1, 3])
下面是一些示例代码:

nr_all,nr_sub,ng = 10,3,4

arr_all = np.unique(np.random.randint(0,10*nr_all, ng*nr_all).reshape((-1,ng)), axis=1)

ind = np.sort(np.random.choice(np.arange(arr_all.shape[0]), nr_sub, replace=False))
arr_sub = arr_all[ind,:]

def get_ind(arr1, arr2):
    return np.array([np.argwhere((arr_all==arr_sub[n]).all(axis=1)) for n in range(arr2.shape[0])]).ravel()

(get_ind(arr_all, arr_sub)==ind).all()
我正在寻找更有效的
get_ind()
实现,因为在实际用例中
nr_all~10**7
nr_sub~1000
必须执行一百万次

编辑这似乎运行得更快,但正在寻找更快的东西

ind1 = np.argwhere(np.in1d(arr_all, arr_sub).reshape((-1,ng)).sum(axis=1)==ng).ravel()
(ind1==ind).all()