【发布时间】:2017-10-21 10:19:54
【问题描述】:
给定两个列表:
In [518]: A
Out[518]: [3, 4, 2, 1, 7, 6, 5]
In [519]: B
Out[519]: [4, 6]
B 中的每个元素都存在于A 中,无一例外。
我想检索 B 的索引数组,如 A 中所示。例如,A 中的索引 1 中存在 4,B 的位置 5 中存在 6。对于这种情况,我的预期输出是 [1, 5]。
这是我为获取索引所做的:
In [520]: np.flatnonzero(np.in1d(a, b))
Out[520]: array([1, 5])
很遗憾,这在大多数其他情况下都不起作用。例如,如果B = [6, 4],我的方法在应该输出[5, 1]时仍然输出[1, 5]。
有没有一种有效的 numpy 方法来获得我想要实现的目标?
【问题讨论】:
-
很确定这以前出现过?重复呢?
-
np.where的帮助给出了这个确切的例子:ix = np.in1d(A.ravel(), B).reshape(A.shape); np.where(ix)。抱歉,不符合您的第二个条件。 -
@p-robot 是的,此外,我的
flatnonzero方法更好一些。 ;-) -
@Asterisk 是的,这个问题的灵感来自stackoverflow.com/questions/46862148/…,对 Martijn Pieters 的回答稍作修改就会给我我想要的 python 内容。我的问题更多是出于对“如何”的好奇。
-
@cᴏʟᴅsᴘᴇᴇᴅ 啊哈!我知道我以前见过那些 A 和 B:p
标签: python arrays numpy indexing