Gegeben seien zwei Listen:in einem anderen Array A
In [518]: A
Out[518]: [3, 4, 2, 1, 7, 6, 5]
In [519]: B
Out[519]: [4, 6]
Jedes Element in B
existiert in A
, ohne Ausnahme.
Ich möchte ein Array von Indizes für B
abrufen, wie in A zu sehen. Zum Beispiel ist 4 in Index 1 in A vorhanden, und 6 ist in Position 5 für B
. Meine erwartete Ausgabe ist [1, 5]
für dieses Szenario.
Dies ist, was ich den Index bekommen haben:
In [520]: np.flatnonzero(np.in1d(a, b))
Out[520]: array([1, 5])
Leider, dies wird in den meisten anderen Fällen nicht. Beispiel: Wenn B = [6, 4]
, gibt meine Methode weiterhin [1, 5]
aus, wenn sie [5, 1]
ausgeben soll.
Gibt es einen effizienten, anzahlreichen Weg, um das zu erreichen, was ich erreichen möchte?
Ziemlich sicher, dass dies vor gekommen ist: Sie können in
O((m+n)log(m+n))
durch vorsichtiges Artin1d
Ausgang (mit eindeutigen Werten hier) bleiben? Was ist mit Duplikaten? –Die Hilfe für 'np.where' gibt dieses genaue Beispiel:' ix = np.in1d (A.ravel(), B) .reshape (A.shape); np.where (ix) '. Entschuldigung, stimmt nicht mit Ihrem zweiten Kriterium überein. –
@JonClements Könnte nichts finden ... Was Betrüger in B betrifft, so sollte sicherlich jede Methode, die es wert ist, diese angemessen behandeln, aber es würde mir auch nicht schaden. –