Finden index, wo die Elemente ändern Wert numpy
Angenommen ich habe
>>> v
array([1, 1, 1, 1, 1, 2, 2, 2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 5, 5])
Gibt es eine effiziente numpy Weg zu finden, jeder index, in dem der Wert geändert wird? Zum Beispiel, möchte ich einige Ergebnis wie,
>>> index_of_changed_values(v)
[0, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16]
Wenn dies nicht möglich ist, mit einigen numpy routine, was ist ein schneller Weg, es zu tun in python? Es wäre auch nützlich für mich zu sein, bezeichnet einige gute numpy tutorials da ich ein numpy beginner.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie diese Funktionen in numpy durch den Vergleich jedes element mit seinen Nachbarn;
bekommen, die Indizes verwenden Sie die "wo" - Funktion
Von hier aus können Sie vorangestellt wird, das erste element, und fügen Sie eine eins zu bekommen, um das gleiche Schema-index Sie haben in Ihrer Frage.
Ähnlich wie @Zunft Antwort, aber erfordert weniger massieren das Ergebnis:
Keine Notwendigkeit vorangestellt wird, 0 oder 1 hinzufügen.
Beispiel:
EDIT: wie @Praveen erwähnt, dieser schlägt fehl, wenn die letzten und die ersten Elemente gleich sind.
[1, 1, 1, 2, 2, 2, 1, 1, 1]
. d.h., die ersten und letzten Werte sind die gleichen, so dass Sie nicht den index '0' wie Sie erwarten, dass...Vielleicht ist Es, weil Python 3.5, aber die oben genannten codes nicht für mich arbeiten.
Sieht aus wie
v[:-1] != v[1:]
nicht wieder einiterable
aber eine einzelnebool
.Kam ich auf folgende list comprehension mit
zip
undenumerate
Jemand auf der Suche für die Lösung in py3.5 könnte das nützlich finden!
v[:-1] != v[1:]
Rückgabe nichtbools
was wiederum nicht mitnumpy.where
im python-3.5. Und die Antwort war ausgerichtet auf die Menschen, die kommen würden, um diese Frage und die Verwendung von python 3.5. Und ja, ich weiß, obige code verwendet numpy und diese nicht.v
ist eine Liste in deinem Fall, einfach konvertieren es in ein numpy-array mitnp.array(v)
würde die Dinge arbeiten Sie mitv[:-1] != v[1:]
.