Numpy 在一个数组列表中查找索引出现在另一个数组列表中

Numpy find index in a list of arrays appeared in another list of arrays

所以假设我有一个名为 original_arr 的数组列表,另一个名为 find_arr 的数组列表,我如何找到 original_arr 中出现的元素的索引 [=14] =]? (我有很多列表要处理)

a = np.arange(27).reshape(9,3)
original_arr = np.split(a,3)
>>> original_arr
>>> [array([[0, 1, 2],
            [3, 4, 5],
            [6, 7, 8]]), 
     array([[ 9, 10, 11],
            [12, 13, 14],
            [15, 16, 17]]), 
     array([[18, 19, 20],
            [21, 22, 23],
            [24, 25, 26]])]

b = np.array([[0,1,2],[3,4,5],[12,13,14],[15,16,17],[21,22,23]])
find_arr =  np.split(b,np.array([2,2,1]).cumsum()[:-1])
>>> find_arr
>>> [array([[0, 1, 2],
            [3, 4, 5]]), 
     array([[12, 13, 14],
            [15, 16, 17]]), 
     array([[21, 22, 23]])]

所以我尝试了下面的代码,但它不起作用

index = np.empty((0,2),int)

for i in range (len(find_arr)):
    for j in range (len(find_arr[i])):
        m = np.where((original_arr[i] == find_arr[i][j]).all(axis=1))
        index = np.append(index,m,axis=0)

我期望的输出是什么(例如。因为 find_arr 中的 [0, 1, 2] 出现在 original_arr[0][0] 中,所以输出应该是 [0,0][[0],[0]]) :

array[[[0,0],[0,1]],
      [[1,1],[1,2]],
      [[2,1]]]

or 
array[[[[0],[0]],[[0],[1]]],
      [[[1],[1]],[[1],[2]]],
      [[[2],[1]]]]

任何人都可以检查我的代码哪里错了吗?或者有更简单的方法吗?

您想将行号 i 附加到 m,但 m 具有不同的类型。因此,如下所示从 np.where(..)[0][0] 中获取输出并将其附加到 i,然后再插入到 index.

for i in range (len(find_arr)):
    for j in range (len(find_arr[i])):
        m = np.where((original_arr[i] == find_arr[i][j]))[0][0]
        index = np.append(index,[[i, m]],axis=0)

另一个可能更快的选择是像这样使用 np.nonzero(..==..)[0][0]

m = np.nonzero((original_arr[i] == find_arr[i][j]))[0][0]

两者都会输出:

[[0 0]
 [0 1]
 [1 1]
 [1 2]
 [2 1]]

如您所料。