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]]
如您所料。
所以假设我有一个名为 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]]
如您所料。