Verfasst am: 11.11.2015, 14:02
Titel: Ähnliche Werte aus Spalten einer txt finden und sortieren
Hallo,
ich habe folgendes vor. Ich habe zwei .txt Dateien, mit mehreren Spalten. Ich will aus den Dateien jeweils die ersten zwei Spalten in Matlab einlesen und ähnliche Werte finden und so sortieren. Es sollen quasi die korrespondierenden Werte der ersten Spalte der ersten Datei in der ersten Spalte der zweiten Datei gefunden werden, und diese beiden Spalten in einer neuen Datei ausgegeben werden. Die 4 Spalten sollen also in einer neuen .txt-Datei in einer Zeile stehen. D.h. ich habe z.B. folgendes:
Ich möchte jetzt wie gesagt die ersten beiden Spalten auslesen und ähnliche Werte finden und sortieren. Die Abweichung von Spalte 1 der Datei 1 zu der Spalte 1 der Datei 2 darf maximal (z.B.) 0.2 sein. Aussehen soll das ganze dann so:
Was ich noch erwähnen möchte ist, dass die Spalten der Dateien unterschiedlich lang sind. Es wird also Werte geben, die keine ähnlichen Werte in der zweiten Datei besitzen.
Wenn ich das jetzt unverständlich erklärt habe, bitte ich dies zu entschuldigen, ich versuche es dann gerne nochmals.
Bisher habe ich die Dateien mit textscan eingelesen.
Also ich habe bereits die Werte in Matrizen gespeichert.
Matrix1 besteht aus der Spalt1 1 und Spalte2 der Datei1 und Matrix2 aus Spalte1 und Spalte2 der Datei2.
Nun suche ich einen Weg, um zu jedem Wertepaar der Matrix1 das passende Paar in Matrix2 zu finden und diese in eine neue Matrix zu schreiben. Wie gesagt weichen die Wertepaare voneinander ab, sodass ich einen Schwellwert benötige, der den Unterschied zwischen den Wertepaaren darstellt.
So, habe mir folgendes überlegt. Ich sortiere die Listen der Größe nach. Anschließend vergleiche ich die Werte. Sind die Differenzen < als ein Schwellwert, dann wird dieser Wert in eine neue Liste geschrieben, sind sie größer (passen also nicht zusammen) wird 0 eingefügt. Ziel ist es, die Listen auf die selbe Länge zu bekommen.
Es soll dann so aussehen:
L1:
10.6 2.14
10.9 2.31
10.1 2.05
L2:
10 2
11 2.3
9.3 1.7
10.5 2.1
ListNeu:
0 0
10.1 2.05
10.6 2.14
10.9 2.31
Mit folgendem Code habe ich es probiert, Problem ist die unterschiedliche Zeilenzahl der Listen.
Fehler: Attempted to access ListL1(4,1); index out of bounds because size(ListL1)=[3,2].
for i=1:length(ListL2) for j=1:length(ListL1) if ListL2(i) < ListL1(j)+th || ListL2(i) < ListL1(j)-th
ListNeu(i,1) = ListL1(i,1);
ListNeu(i,2) = ListL1(i,2);
else
ListNeu(i,1) = 000.000;
ListNeu(i,2) = 000.000;
end end end
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.