Array nach einem bestimmten Wert durchsuchen und anschließend von diesem Wert aus neu ordnen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Hallo an alle potentiellen Helfer ^^,

ich habe ein Problem, bei dem ich eure Hilfe gut gebrauchen könnte. Ich habe einen zweispaltigen Array. Dieser kann beliebig viele Zeilen aber nur zwei Spalten haben. Bei diesem Array möchte ich die erste Spalte nach einem bestimmten Wert, dieser ist mir vorher schon bekannt, durchsuchen. Dann möchte ich den Array so neu ordnen, dass dieser Wert, zusammen mit seinem zugehörigen Wert aus der zweiten Spalte, ganz oben steht. Darunter sollen die Wert stehen die auch im vorherigen Array nach diesem kamen und darunter sollen die Werte stehen, die im vorherigen Array darüber standen. Weil die Beschreibung des Problems doch recht komplex zu verstehen ist, habe ich euch unten ein Beispiel gemacht^^
Ich hoffe, dass mir jemand bei diesem Problem helfen kann und danke schon mal im Voraus!

Viele Grüße
Nino

bestimmter Wert = x4

alter Array neuer Array
X / Y X / Y

x1 / y1 x4 / y4
x2 / y2 x5 / y5
x3 / y3 x6 / y6
x4 / y4 x1 / y1
x5 / y5 x2 / y2
x6 / y6 x3 / y3
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Ein Beispiel mit realen Daten wäre besser, dann könnte man auch gleich sehen, welches Format sie wirklich haben. Es gilt, wie immer, das Problem in verschiedene Schritte herunterbrechen und jedes einzeln lösen. 1. Index finden. 2. Daten verändern. Und für alles haben Arrays schon passende Methoden.

Code: Alles auswählen

In [1]: import numpy as np 

In [2]: daten = np.arange(10).reshape(-1, 2)                                                                                                                                       

In [3]: daten                                                                                                                                                                      
Out[3]: 
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])

In [4]: (daten[:,0]==4).nonzero()                                                                                                                                                  
Out[4]: (array([2]),)

In [5]: index = (daten[:,0]==4).nonzero()[0][0]                                                                                                                                    

In [6]: np.roll(daten, -index, axis=0)                                                                                                                                             
Out[6]: 
array([[4, 5],
       [6, 7],
       [8, 9],
       [0, 1],
       [2, 3]])
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Hey Sirius,

danke für die schnelle Antwort.
Okay gut, das merke ich mir dann, wenn ich das nächste mal eine Frage poste :)

Grüße
Nino
Antworten