WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Ähnliche Werte aus Spalten einer txt finden und sortieren

 

hassel
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2015, 14:02     Titel: Ähnliche Werte aus Spalten einer txt finden und sortieren
  Antworten mit Zitat      
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:

Datei 1:
10 2 ... ... ...
10.5 2.1 ... ... ...
11 2.3 ... ... ...
...

Datei 2:
10.6 2.14 ... ... ...
10.9 2.31 ... ... ...
10.1 2.05 ... ... ...
...

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:

10 2 10.1 2.05
10.5 2.1 10.6 2.14
11 2.3 10.6 2.14

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.

Ich bitte um Hilfe Smile

Danke
Private Nachricht senden Benutzer-Profile anzeigen


hassel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2015, 17:05     Titel:
  Antworten mit Zitat      
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.

Gibt es dafür überhaupt einen machbaren Weg?
Private Nachricht senden Benutzer-Profile anzeigen
 
hassel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2015, 12:04     Titel:
  Antworten mit Zitat      
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].

Code:
fileIDL1 = fopen('L1.txt');
L1Data = textscan(fileIDL1,'%f %f');
fprintf(fileIDL1,'%f;\n', L1Data{1});
fclose(fileIDL1);

L11=L1Data{1};
L12=L1Data{2};

M_L1 = [L11(:,1) L12(:,1)];
sd1 = M_L1(:,1);
sd2 = M_L1(:,2);

fileIDL2 = fopen('L2.txt');
L2Data = textscan(fileIDL2,'%f %f');
fprintf(fileIDL2,'%f;\n', L2Data{1});
fclose(fileIDL2);

L21=L2Data{1};
L22=L2Data{2};

M_L2 = [L21(:,1) L22(:,1)];

ListNeu = zeros(size(M_L2));

sr1 = M_L2(:,1);
sr2 = M_L2(:,2);
th = 0.5;

[ListL2, indexR] = sort(M_L2);
[ListL1, indexD] = sort(M_L1);

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


Jetzt einer eine Idee?
Private Nachricht senden Benutzer-Profile anzeigen
 
hassel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.11.2015, 11:39     Titel:
  Antworten mit Zitat      
Ich habe nun eine zufriedenstellende Lösung gefunden.

Code:
fidR = fopen('Real1.txt');
DataR= textscan(fidR, '%f %f %f %f %f %f %f ');

DataR = [DataR{1} DataR{2} DataR{3} DataR{4}];

fidD = fopen('Dist1.txt');
DataD= textscan(fidD, '%f %f %f %f %f %f %f ');

DataD = [DataD{1} DataD{2} DataD{3} DataD{4}];
dlmwrite('MsD.txt', DataD, 'delimiter', '\t','newline','pc');
MN = zeros(size(DataD));
th = 4;

for i = 1:length(DataD)
    for j = 1:length(DataR)
        if abs(DataD(i,1) - DataR(j,1)) < th && abs(DataD(i,2) - DataR(j,2)) < th
            MN(i,1) = DataR(j,1);
            MN(i,2) = DataR(j,2);
            MN(i,3) = DataR(j,3);
            MN(i,4) = DataR(j,4);
        end
    end
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.