2016-07-19 19 views
4

Ich habe versucht, dies in Python zu tun, aber ich erhalte eine Fehlermeldung:Python-Array außerhalb der Grenzen Filterung

import numpy as np 
array_to_filter = np.array([1,2,3,4,5]) 
equal_array = np.array([1,2,5,5,5]) 
array_to_filter[equal_array] 

und dies führt zu:

IndexError: index 5 is out of bounds for axis 0 with size 5 

Was soll das? Ich dachte, ich würde hier die richtige Operation machen. Wenn ich nicht auf dem richtigen Weg

Ich erwarte, dass, wenn ich

array_to_filter[equal_array] 

tun, dass es

np.array([1,2,5]) 

zurückkehren würde, wie würde ich es bekommen, das zu tun?

+2

'array_to_filter [gleich_array - 1]' vielleicht das? Der Index beginnt bei 0. – Psidom

Antwort

0

In der letzten Anweisung sind die Indizes für Ihr Array 1,2,5,5 und 5. Index 5 bezieht sich auf das 6. Element im Array, während Sie nur 5 Elemente haben. array_to_filter[5] existiert nicht.

[i for i in np.unique(equal_array) if i in array_to_filter]

zurückkehren würde die Antwort, die Sie wollen. Dies gibt jedem der eindeutigen Wert in equal_array, wenn es auch in array_to_filter existieren

+0

Ich sehe, das macht Sinn. Ich habe bearbeitet, um meine wahre Frage zu spezifizieren. – vashts85

+0

Antwort bearbeitet, um aktualisierte Frage zu reflektieren – user3404344

+0

So funktioniert dies für diesen speziellen Fall mit harten Codierungswerten, aber was ich möchte, ist in der Lage, eine Funktion mit diesem zu erstellen, die die eindeutigen Werte in einem Array findet, und gibt eine Übereinstimmung von die eindeutigen Werte in einem anderen Array. – vashts85

0

Wenn array_to_filter eindeutige Werte haben garantiert ist, können Sie tun:

>>> array_to_filter[np.in1d(array_to_filter, equal_array)] 
array([1, 2, 5]) 

Vom documentation: np.in1d kann als ein Element betrachtet werden -wise-Funktionsversion des Python-Schlüsselworts in, für 1-D-Sequenzen. in1d(a, b) entspricht in etwa .

Verwandte Themen