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

Abgleich zweier Matrizen und Werte zuordnen

 

nic

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2011, 14:21     Titel: Abgleich zweier Matrizen und Werte zuordnen
  Antworten mit Zitat      
Hallo!

Ich möchte aus den 2 Matrizen X und Y eine Matrix Z basteln. Schnittstelle der beiden Matrizen ist die die in beiden enthaltene Variable ID(101,102...).
Problem an der Sache ist jedoch, dass beide Matrizen unterschiedlich lang sind. Grund dafür sind Fehlwerte in Y, die allerdings nicht als 0 oder NaN geschrieben wurden, sondern gar nicht auftauchen (also einfach weggelassen wurden). Ich möchte die Fehlwerte dann jedoch als NaN ausgeben lassen.
Vorstellen darf man sich das so:

X=[101 102 103 104 105 106 107 108; 33 33 34 35 35 36 36 36; 123 432 654 785 435 432 980 125] ';
Y=[101 103 106 107 108; 0.4 0.2 0.78 0.4 0]';

Ergebnis soll dann sein:

Z=[101 102 103 104 105 106 107 108; 33 33 34 35 35 36 36 36; 123 432 654 785 435 432 980 125; 0.4 NaN 0.2 NaN NaN 0.7 0.4 0]'

Ich hatte nun folgendes probiert: eine Art Vergleich zeilenweise, was aber natürlich nicht funktioniert, wenn ein Fehlwert auftritt (in Z stehen schon die Werte aus X in den Spalten 1:3-->Ergänzung durch 1 Spalte aus Y):

Code:
for i=1:length(X);
if X(i,1)== Y(i,1);
   Z(i,3:6)=Y(i,2);
else
   X(i,3:6)= nan;
   
end
end  


Jetzt hab ich noch ein bisschen mit dem Befehl find probiert, bin aber für diesen Fall nicht besonders weit damit gekommen!

Weiß jemand Rat?


Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2011, 15:13     Titel:
  Antworten mit Zitat      
Hi, hilft dir das weiter?

Code:

Z=[X nan(8,1)];
Z(Y(:,1)-100,4)=Y(:,2);
 
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 12.01.2011, 16:17     Titel:
  Antworten mit Zitat      
Hallo

Code:

Z = nan(size(X,1),size(X,2)+1)
Z(:,1:size(X,2))=X;
pos_ok  = ismember(X(:,1),Y(:,1))
Z(pos_ok,4)=Y(:,2)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
nic

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2011, 15:44     Titel:
  Antworten mit Zitat      
Hey Denny!

Vielen Dank. Das ist wirklich eine gute idee... Mit dem Befehl ismember hab ich gestern auch schon ein bisschen rumgewerkelt, es aber noch nicht wirklich einzusetzen gewusst!

LG
 
nic

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2011, 17:25     Titel:
  Antworten mit Zitat      
Nochmal kurz:
ich habe den Code jetzt für meine Zwecke umgebastelt (auf relativ große datenmengen). Leider funktioniert es jetzt hier nicht!
Es gibt immer die Fehlermeldung :

??? Subscripted assignment dimension mismatch.

Hat ismember irgendwelche begrenzungen?Spaltenanzahl bleibt so wie im o.g. Beispiel. Nur an der Zeilenanzahl ändert sich was (X=39200 Werte, Y=30020).
Ich komm echt nicht drauf was da faul ist!
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 13.01.2011, 18:15     Titel:
  Antworten mit Zitat      
Womöglich ist das keine Schuld von ISMEMBER
sondern es tauchen Werte die nicht in X sind?
Private Nachricht senden Benutzer-Profile anzeigen
 
nic

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2011, 19:08     Titel:
  Antworten mit Zitat      
kann es sein, dass ismember aufsteigend sortierte Werte für X braucht?
in meiner Tabelle sind die nämlich unsortiert...
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 13.01.2011, 19:20     Titel:
  Antworten mit Zitat      
Nein, ISMEMBER braucht keine Vorsortierung.

Bricht denn dein Code wirklich beim ISMEMBER ab?
Poste doch dein Code?
Private Nachricht senden Benutzer-Profile anzeigen
 
nic

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2011, 19:42     Titel:
  Antworten mit Zitat      
an dem code hat sich soweit nichts verändert, ausser das ich noch ein paar Spalten hinzugefügt habe:

Code:
Z = nan(size(X,1),size(X,2)+size(Y,2)-1);
Z(:,1:size(X,2))=X;
pos_ok  = ismember(X(:,1),Y(:,1));
Z(pos_ok,6:18)=Y(:,2:14);  


aber: ich hab mir jetzt die X-Daten nochmal genauer angeschaut. manche X-Werte kommen doppelt vor. Ich glaube darin liegt das Problem!
Wie kommt man da am besten raus?
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 13.01.2011, 20:05     Titel:
  Antworten mit Zitat      
Stimmt es kommt wegen doppelter Werten zum Fehler
Also vermutlich UNIQUE vorher nutzen:
Code:

X=[101 102 103 104 105 106 107 107 108; 33 33 34 35 35 36 36 36 36; 123 432 654 785 435 432 980 980 125]';
Y=[101 103 102 107 108; 0.4 0.2 0.78 0.4 0]';

X = unique(X,'rows');
[pos_ok,pos_y]  = ismember(X(:,1),Y(:,1))
Z(pos_ok,size(X,2)+1:end)=Y(pos_y(pos_ok),2:end)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
nic

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2011, 15:26     Titel:
  Antworten mit Zitat      
super danke!
jetzt funktionerts!
UNIQUE...das hatte ich schon mal benutzt..!
VIELEN DANK!
 
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.