Seite 1 von 1

Spalten einer Matrix nach Wert des ersten Eintrages sortieren

Verfasst: Freitag 29. Dezember 2017, 14:25
von dot
Liebe Leute im Forum,

ich habe hier ein kleines Problem: Ich möchte die Spalten einer Matrix so sortieren, dass die Einträge der 1. Zeile aufsteigend sortiert sind, die Spalten als ganzes aber erhalten bleiben. Der Befehl "sort" sortiert leider die komplette Matrix um, sodass die Spalten nicht erhalten bleiben.

Hier mein Versuch:

Code: Alles auswählen

import numpy as np

n=7
c=np.eye(n)
c[0]=[9,2,3,3,5,6,7]
b=sorted(c[0])

d=np.zeros((n,n))

while(np.array_equal(b,d[0])==False):
    for i in range(n-1):
        ffirst=c[:,i]
        fsec=c[:,i+1]
        if(c[0][i]<c[0][i+1]):
            d[:,i]=ffirst
            d[:,i+1]=fsec
        else:
            d[:,i]=fsec
            d[:,i+1]=ffirst
      
print(d)
d soll die neue sortierte Matrix sein. Es kommt keine Fehlermeldung, aber auch kein Output. Bin noch blutiger Anfänger und freu mich über Hinweise auf Fehler.

Ich brauch die Lösung des Problems, um Eigenvektoren nach der Größe ihrer Eigenwerte zu sortieren.

Danke schonmal für Eure Hilfe!

Re: Spalten einer Matrix nach Wert des ersten Eintrages sortieren

Verfasst: Freitag 29. Dezember 2017, 22:09
von dot
Habe jetzt selbst eine Lösung gefunden. Falls andereLeute das selbe Problem haben, hier ist die Lösung:

Code: Alles auswählen

import numpy as np

n=7
c=np.eye(n)
c[0]=[9 ,10 ,3 ,3 ,5 ,6 ,7]
b=sorted(c[0])
f=np.argsort(c[0])


d=np.zeros(shape=(n,n))
for i in range(n):
    d[:,i]=c[:,f[i]]
print(d)
Ich wünsche allen einen schönen Abend.

Re: Spalten einer Matrix nach Wert des ersten Eintrages sortieren

Verfasst: Freitag 29. Dezember 2017, 23:34
von Sirius3
@dot: Du hast ja die Lösung schon selbst gefunden: `argsort`. Aber Dein restlicher Code ist noch sehr umständlich, b brauchst Du nicht und Spalten umsortieren geht einfach per Indexzugriff:

Code: Alles auswählen

import numpy as np

n = 7
c = np.eye(n)
c[0] = [9 ,10 ,3 ,3 ,5 ,6 ,7]
d = c[:, c[0].argsort()]
print(d)

Re: Spalten einer Matrix nach Wert des ersten Eintrages sortieren

Verfasst: Samstag 30. Dezember 2017, 15:21
von dot
Ok. toll, vielen Dank!