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

Aus Matrix diverse Vektoren erstellen

 

Tobi_Erd
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 27.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2015, 21:25     Titel: Aus Matrix diverse Vektoren erstellen
  Antworten mit Zitat      
Hallo zusammen,

absoluter Matlab-Neuling mit der Bitte um Nachsicht!
Problem:
Ich habe ein Datensatz in Matlab importiert und habe eine Matrix erhalten (8658x10 double).
Spalte 1 gibt die Jahreszahl an und für jedes Jahr sind Daten im Umfang von 111 Zeilen vorhanden. Ich benötige 67 Vektoren die eine länge von 111 Zeilen haben und die Daten aus der dritten Spalte beinhalten.
Weiterhin sollen diese 67 Vektoren in eine Struktur eingefügt werden.
Ich würde das ganze ungern händisch machen und wollte deshalb eine Schleife erstellen die jeweils in 111er Schritte einen dynamischen Vektor erstellt.
Leider funktioniert das ganze nicht so wie ich mir das vorgestellt habe.. Crying or Very sad

Need Help!!!

Code:

io=1933
x=1
y=111

for  i=1:8658
   assignin ('Mtotal'),['Cohort_'num2str(io)]) = Mtotal(x:y,3)  
    io=io+1
    x=x+111
    y=y+111
end
 
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 27.05.2015, 21:52     Titel:
  Antworten mit Zitat      
Zitat:
Leider funktioniert das ganze nicht so wie ich mir das vorgestellt habe..
das ist natürlich schade aber du solltest auch immer schreiben was da nicht geht... ich denke da kommen schon einige fehlermeldungen wenn du deinen code ausführst...
sihe ambesten dazu auch mal den thread aus meiner signatur. das ist ein guter leitfaden wie man schnell die richtigen antworten erhält.

Code:

i als lauf index zu benutzen ist nicht praktisch da i die imaginäre einheit ist. das kann zu problemen führen.
Code:
assignin ('Mtotal'),['Cohort_'num2str(io)]) = Mtotal(x:y,3)  

das ganze über assignin zu machen ist natürlich möglich aber das ist nicht die richtige syntax. guck dir am besten mal die documentation von zu assignin an.
allerdings würde ich dir generel von solchen konstrukten abraten
du erstellst da dynamische variablen namen. ein index hat nix im namen verloren sondern sollte als index verwendet werden. eine verwendung von cell arrays oder auch mehr dimensionalen arrays oder structs ist besser. es ist aufwendig dynamische variablen namen zu generieren.... es ist noch aufwendiger sie danach weiter zu verarbeiten.... und beim debuggen weis keiner mehr wo variablen herkommen und wo sie erzeugt werden....
Code:
ich dachte die jahreszahlen liegen schon in deinen daten vor. warum erstellst du sie neu?
Code:
x=x+111
    y=y+111

diese schritte werden 8658 mal ausgeführt. 8658*111 ist denke ich außerhalb deines gewünschten bereiches.

zusammenfassen würde ich dir empfehlen das getting startet von matlab durchzuarbeiten. das geht fix und beantwortet die meisten fragen die so erstmal zur adressierung von arrays stellen.
dann würde ich mir auch mal den befehl reshape angucken. könnte sein das der hilfreich ist.
grüße
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.05.2015, 23:18     Titel:
  Antworten mit Zitat      
Hallo,

es sollten doch dann 8658/111 = 78 Vektoren sein?

Zusätzlich zu Winkows Erläuterungen kann auch der Befehl mat2cell hilfreich sein, etwa so
Code:
Mtotal.Cohort = mat2cell(Mtotal(:,3), 111*ones(78,1), 1);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Tobi_Erd
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 27.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2015, 17:37     Titel:
  Antworten mit Zitat      
Zunächst mal vielen Dank für die schnellen und ernüchternden Rückmeldungen.
Ich werde meinen Ansatz noch mal überarbeiten und das empfohlene getting startet von Matlab durcharbeiten.

Viele Grüße
Tobi
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.05.2015, 20:44     Titel:
  Antworten mit Zitat      
Hallo,

ich verstehe nicht, was an den Rückmeldungen ernüchternd ist.
Wenn ich deine Frage richtig verstanden habe, dann kann das von dir gewünschte mit dieser einen Zeile erledigt werden. Wenn diese Zeile nicht das gewünschte macht, dann bitte die Frage nochmal genauer erklären.

Das Getting Started ist sicher eine gute Idee. Eine meines Erachtens noch schönere Alternative ist das MATLAB Onramp:
https://matlabacademy.mathworks.com/R2015a/

Grüße,
Harald
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.