这个问题有些模棱两可。我们是按值还是按顺序查找元素的索引?
解开序数索引
假设 A1 中的值不重要(即这不是搜索某些值,而是真正找到与某个位置对应的索引),你可以使用unravel_index。
例子:
>>> np.unravel_index(3, A1.shape)
(1, 0)
或者,总的来说A2 一口气:
>>> np.unravel_index(A2, np.array(A1).shape)
(array([0, 0, 0, 1, 1, 1]), array([0, 1, 2, 0, 1, 2]))
您可能更喜欢将其作为元组列表(上述“转置”):
>>> list(zip(*np.unravel_index(A2, np.array(A1).shape)))
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
搜索值
相反,如果您是搜索值,例如,A1 中是否有等于A2[i] 的值,那么,就像在@dc_Bita98 的回答中一样:
>>> tuple(np.argwhere(A1 == A2[3]).squeeze())
(1, 0)
如果您想在一张照片中拍摄所有位置,则需要采取措施来处理形状不同的事实。为了说明起见,还要说:
A3 = np.array([9, 1, 0, 1])
然后,要么:
>>> i, j, k = np.where(A1 == A3[:, None, None])
>>> out = np.full(A3.shape, (,), dtype=object)
>>> out[i] = list(zip(j, k))
>>> out.tolist()
[None, (1, 0), (2, 0), (3, 0)]
这清楚地表明第一个值 (9) 没有找到,以及在哪里可以找到其他值。
或者:
>>> [tuple(np.argwhere(A1 == v).squeeze()) for v in A3]
[None, (0, 1), (0, 0), (0, 1)]