[MatLab] Zeilen einer matrix sortieren

~DeD~

Lt. Commander
Registriert
Juni 2006
Beiträge
1.725
Hi,

ich habe hier einige daten aus einer .dat-datei zu sortieren. diese sind x,y,z-koordinaten aus einer bildaufnahme entstanden. das ganze ist ein rauheitsprofil. x und y spannen quasie die ebene auf und z gibt die höhe in dem jeweiligen punkt.

das problem ist beim export dieser daten werden die bildinfos von der laicasoftware in bildzeilen gespeichert. also 3 spalten aber in der form

0 0 z
0 1 z
0 2 z
0 3 z
. . .
. . .
1 0 z
1 1 z
1 2 z
1 3 z

und so weiter. damit ich das plotten kann brauche ich das ganze aber richtig geordnet. wie stelle ich das an?
sortrows kann ich ja nicht benutzen, da x und y sich oft wiederholen.wiederholen.
es müssten ja nur die zeilen umsortiert werden.

mir schwebt da sowas vor wie:

for i=1:size(M)
zwert in der matrix von links nach rechts schreiben bis sich der y-wert ändert, danach die nächste zeile beginnen.
.
.
.
end

es sind etwas über 440.000 zeilen zu sortieren.
 
Zuletzt bearbeitet:
AW: Zeilen einer matrix sortieren

Hi,

eine wichtige Info wäre mal:

1) In welcher Programmiersprache?

2) Und was meinst du als "richtig geordnet" ? Mit x und y je als eigener achse damits so ähnlich aussehen soll?

Code:
0 1 2 3 4 5 6 ... x
1 z z z z z z
2 z z z z z z
3 z z z z z z
4 z z z z z z
:
y

In python könnte man das z.B folgendermaßen lösen:
Code:
from collections import defaultdict
profile = defaultdict(lambda: defaultdict(int))

with open("input.dat") as f:
	for line in f.readlines():
		x, y, z = line.split()
		
		profile[x][y] = z

		
for key_x in profile:
	for key_y in profile[key_x]:
		print key_x,key_y,profile[key_x][key_y]

3) Wie solls ausgegeben werden? Heatmap? Excelfile? was ganz anderes?
 
Zuletzt bearbeitet:
AW: Zeilen einer matrix sortieren

Oh, peinlich. Ist irgendwie untergegangen. Ich mache das ganze mit MATLAB. Am Ende soll es genau so aussehen wie du es vorgemacht hast. Ausgabeformat kläre ich noch, zunächst soll das Sortieren klappen.

hier nochmals ein kleiner auszug aus der matrix

634,949 | 0 |-1,86372
635,779 | 0 |-1,97151
636,609 | 0 | -1,97192
0 | 0,830 | 0,0382
0,830 | 0,830 | 0,03466
1,66000 | 0,830 | 0,01768
2,49000 | 0,830 | -0,03613
3,32000 | 0,830 | -0,11543
4,15000 |0,830 | -0,15536

ich hbae halt den ersten y-wert und alle dazugehörigen x-werte der zeile aus dem bild. im edeffekt muss ich ich das so sortieren, dass ich es als 3D plot mir anzeigen kann.

edit:

Problem gelöst, nach etwas überlegungsarbeit ist mir eingefallen, dass ich die ersten beiden spalten ja garnet brauche :D

y = find(M(:,1)< 0.1);

for n = 1:size(y)-1
Msort(n,: ) = M(y(n):y(n+1)-1,3)';
end

figure(1)
mesh(Msort)
 
Zuletzt bearbeitet:
Zurück
Oben