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

Werte aus matrix auslesen und in struct abspeichern

 

danielp
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 14.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.06.2014, 14:03     Titel: Werte aus matrix auslesen und in struct abspeichern
  Antworten mit Zitat      
Hallo zusammen,

Ich habe zwei n x m Matrizen, die ich mit reshape geordnet habe.
Ich vergleiche nun die einzelnen Spaltenvektoren mit corcoeff. Die Kreuzkorrelation der beiden Vektoren wurde bereits ausgeführt.

Nun möchte ich, nachdem ich die Spaltenvektoren verglichen habe, die beiden in einem Struct abspeichern und den Struct auch eine fortlaufende Nummer geben. Ich brauche wahrscheinlich eine for-schleife dazu um alle Spalten durchzugehen. Anbei mein Code. Vielen Dank.

Code:
function[Ausgabe]=Extrahieren_pr_richtig(Px,Py)        
if mod(length(Px),500)=0
    Px=reshape(Px,[],500);
else
    C=500-mod(length(Px),500);
    C=zeros([1 C]);
    Px=[Px C];
    Px=reshape(Px,500,[]);                
    Px=Px'
end
if mod(length(Py),500)=0
    Py=reshape(Py,500,[]);
else
    C=500-mod(length(Py),500);
    C=zeros([1 C]);
    Py=[Py C];
    Py=reshape(Py,[],500);
    Py=Py'  
end
[~ m]= size Px;
for i=1:m
       x=corrcoef(P1(:,m),P2(:,m));
       if x>0,8
       else
           
       end
       
end


[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


danielp
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 14.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2014, 16:50     Titel: frage
  Antworten mit Zitat      
Hallo zusammen,

ist meine Frage zu umständlich beschrieben? Ich würde gerne allgemein wissen, wie ich zwei beliebige Spalten aus zwei verschiedenen Matrizen extrahieren kann und diese in einem Struct abspeichere. Da dies mit mehreren Spalten aus den zwei Matrizen geschehen soll, bin ich mir nicht schlüssig wie ich das genau machen kann.

Danke
Gruß
Tobi
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.06.2014, 00:15     Titel: Re: Werte aus matrix auslesen und in struct abspeichern
  Antworten mit Zitat      
Hallo danielp,

Ich verstehe weder die Frage noch den geposteten Code.

Zitat:
Ich habe zwei n x m Matrizen, die ich mit reshape geordnet habe.

Was soll der Code mit dem RESHAPE bewirken? Ist es gewollt, dass der Code nur bis zur Länge 500 funktionieren soll? Meinst Du wirklich LENGTH(Px) oder geht es um SIZE(Px, 1)?

Zitat:
Nun möchte ich, nachdem ich die Spaltenvektoren verglichen habe, die beiden in einem Struct abspeichern und den Struct auch eine fortlaufende Nummer geben.

Wenn Du die Daten in einem Struct speicherst, welcher Struct kann dann eine fortlaufende Nummer haben? Meinst Du die Feldnamen? Das wäre eine schlechte Idee, denn das wäre das Verstecken eines Indexes in Namen der Variablen. Wenn man etwas indiziert, ist ein echte Index aber viel praktischer.
Die automagische Vergabe von Namen mit versteckten Indices ist dagegen ein typischer Anfängerfehler und wurde deshalb schon hunderte Male in diesem Forum besprochen. Eine Suche würde sich also lohnen.

Code:

% [~ m]= size Px;  % Das ist keine valide Matlab-Syntax. Meinst Du:
m = size(Px, 2);
S.value = cell(1, m);
for i=1:m
       x = corrcoef(P1(:,m),P2(:,m));
       if x>0,8   % Meinst Du 0.8 ? x ist eine Matrix, welches Element meinst Du?
          S.value{m} = x;
       else
           ???
       end
end

Matlab benötigt Dezimal-Punkte, keine -Kommas.

Aber insgesamt ist mir noch nicht klar, was Du genau wie abspeichern möchtest.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
danielp
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 14.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2014, 10:36     Titel:
  Antworten mit Zitat      
Hi Jan,

vielen Dank für deine Antowrt und entschuldige vielmals die ungenaue Beschreibung meines Problems! Ich möchte jeweils die beiden gleichen Spalten von Px und Py in einem Struct abbspeichern.

Du hast mir mit deinen Code-Anmerkungen sehr viel geholfen! Wenn ich es manuell im Command Window probiere , wird im Struct genau das abgespeichert, was ich möchte. Mein einziges Problem nun ist, wie ich mir das Struct aus der Funktion richtig ausgeben lasse. So wie ich es mache, wird nur der letzte Wert der for-Schleife abgespeichert.


Code:
function[Daten]=Extrahieren_pr_richtig(Px,Py)          
if mod(length(Px),500)==0
    Px=reshape(Px,[],500);
else
    C=500-mod(length(Px),500);
    C=zeros([1 C]);
    Px=Px';
    Px=[Px C];
    Px=reshape(Px,500,[]);                
end
if mod(length(Py),500)==0
    Py=reshape(Py,500,[]);
else
    C=500-mod(length(Py),500);
    C=zeros([1 C]);
    Py=Py';
    Py=[Py C];
    Py=reshape(Py,500,[]);
       
end
m = size(Px, 2);
S.value = cell(2, m);
for i=1:m
       x=corrcoef(Px(:,m),Py(:,m));
       if x(1,1)>0.9
           P=[Px(:,m) Py(:,m)];
           S.value(1,m)={P};

       else
           P=[Px(:,m) Py(:,m)];
           S.value(2,m)={P};
       end
 
    Daten = S.value;
       
end
 
[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.06.2014, 21:42     Titel:
  Antworten mit Zitat      
Hallo danielp,

Zitat:
So wie ich es mache, wird nur der letzte Wert der for-Schleife abgespeichert.

Die erklärung ist nicht genau genug, um sie wirklich nachvollziehen zu können. Was siehst Du genau und wie soll es aussehen?

Ist es wirklich gewollt, dass Px 500 Spalten hat, wenn die Input-Länge durch 500 teilbar ist, aber andernfalls 500 Zeilen? Das kommt mir immer noch merkwürdig vor. Da aber nicht dokumentiert ist, welches Verhalten beabsichtig ist, habe ich das nur mal ein wenig zusammengefasst.

Code:
function Daten = Extrahieren_pr_richtig(Px,Py)
if mod(length(Px),500)==0
    Px=reshape(Px,[],500);
else
    C  = 500-mod(length(Px),500);
    Px = reshape([Px', zeros(1, C)], 500, []);                
end
if mod(length(Py),500)==0
    Py=reshape(Py,500,[]);
else
    C=500-mod(length(Py),500);
    Py=reshape([Py', zeros([1 C])], 500, []);    
end

m = size(Px, 2);
Daten = cell(2, m);
for i=1:m
       x=corrcoef(Px(:,m), Py(:,m));
       if x(1,1)>0.9
           Daten{1,m} = [Px(:,m) Py(:,m)];
       else
           Daten{2,m} = [Px(:,m) Py(:,m)];
       end
end

Nun werden in der ersten Zeile von "Daten" die jenigen Px und Py-Spalten zurückgegeben, deren Korrelations-Koeffizient größer als 0.9 ist, und in der zweiten die anderen.
Ein Struct wird für diesen Zweck aber gar nicht benötigt. Insofern ist die Fragestellung noch nicht klar für mich.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
danielp
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 14.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2014, 10:40     Titel:
  Antworten mit Zitat      
Hi Jan,

Super vielen Dank! Da hast du recht, das habe ich noch nicht geändert. Da mod 0 so gut wie nie vorkommt, habe ich vergessen, das zu ändern. Danke.


Bezüglich fort-schleife: Nach Ausführen des Codes sollen, wie du sagst, in der ersten Zeile alle Px,Py-Paare stehen, deren Korrelationskoeffizient >0.9 ist, in der zweiten Zeile alle Paare, deren Korrelationskoeffizient < 0.9 ist.

Vielen Dank für deine Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
danielp
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 14.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2014, 10:44     Titel:
  Antworten mit Zitat      
Anmerkung für Programm:

Laufvariable i anstatt m hernehmen Rolling Eyes
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.