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

Matrix aufteilen

 

entenhausen
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 06.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2013, 09:58     Titel: Matrix aufteilen
  Antworten mit Zitat      
Hallo zusammen,
ich habe folgendes Problem:
ich habe zwei große Vektoren x und y mit jeweils 593 Einträgen. Nun möchte ich diese Vektoren in 5 Teile aufteilen und die Werte Variablen zuordnen. Dabei ist es wichtig, dass die Werte nicht verrutschen, sprich am Ende möchte ich z.B. einen Vektor wie folgt haben:
x1 y1
x2 y2
Var1= ...
x100 y100

Und das halt 5 mal.
Kann mir einer vielleicht helfen?
Ich hatte es zuerst mit der Funktion deal versucht, aber die weist den Variablen ja alle Werte aus der Ursprungsmatrix zu und teilt sie nicht auf.
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: 11.09.2013, 12:03     Titel:
  Antworten mit Zitat      
bei so wenigen elemten sollte eine forschleife das schnell und effizient erledigen.
_________________

richtig Fragen
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: 11.09.2013, 12:05     Titel: Re: Matrix aufteilen
  Antworten mit Zitat      
Hallo entenhausen,

Die Frage ist noch nicht klar. Statt die vorhandenen Inputs zu beschreiben, ist ein Beispiel in valider Matlab-Syntax immer besser nachzuvollziehen. Z.B.:
Code:
x = rand(1, 593);
y = rand(1, 593);

Passt das?

Was wäre denn ein "Verrutschen" der Werte?

Zitat:
...am Ende möchte ich z.B. einen Vektor wie folgt haben:
x1 y1
x2 y2
Var1= ...
x100 y100

Das sagt mir nichts. Woher stammt nun "x1", "y1" etc?

Vielleicht meinst Du etwas wie:
Code:
data = [x; y];
C = cell(1, 5);
w = 100;
for k = 1:5
  C{k} = data(:, 1 + (k-1) * w:k*w);
end

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 06.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2013, 12:14     Titel:
  Antworten mit Zitat      
Mit dem Verrutschen meine ich folgendes: Ich will ja am Ende 5 Matrizen bzw. Vektoren haben. Die beiden Anfangsvektoren sind x und y. Wichtig ist halt, dass die Werte in den Zeilen nicht verrutschen, d.h. dass der erste Wert von Vektor x nach dem Aufteilen auch der erste Wert bleibt. Gleiches Gilt für Vektor y.
Vektor x und y stehen im Zusammenhang zueinander und die Werte müssen halt gleich bleiben. Ich will halt einfach den großen Vektor (593x2) in 5 kleinere aufteilen, die jeweils auch zwei Spalten haben.

Ich hoffe es ist jetzt verständlicher, was ich meine.

LG
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: 11.09.2013, 13:17     Titel:
  Antworten mit Zitat      
Hallo entenhausen,

Wenn ich es richtig verstehe, wäre es recht kompliziert ein "Verrutschen" zu bewerkstelligen, so dass dieses Detail eher verwirrt als zur Lösung beiträgt.

So weit ich es verstehem löst mein Code Dein Problem also bereits. Du hast nun noch die Information gegeben, dass die 593 Elemente in einer Spalte orientiert sind, während ich von einer Zeile ausging. Aber das ist leicht anzupassen.

Ist die Frage damit gelöst?

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 06.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2013, 13:26     Titel:
  Antworten mit Zitat      
Vielleicht nochmal zur Verdeutlichung
wenn ich z.B. folgende Matrix habe:
2 4
6 1
8 9
3 2
5 4

Ich möchte diese Matrix dann einfach aufteilen, wie folgt:
1) 2 4
6 1
8 9

2) 3 2
5 4

Bei mir handelt es sich halt um eine 593x2-Matrix und ich möchte diese in 5 Teile aufsplitten, wo sich die Reihenfolge der Werte aber nicht ändern soll.
Ich hab das so versucht:
Code:
data=[A]; %Matrix A mit der Dimension 593x2
a=data(1:119);
b=data(120:238);
c=data(239:357);
d=data(358:475);
e=data(476:593);

 


Das geht aber nicht, da den Variablen a-e nur die Werte der ersten Spalte von A zugewiesen werden.

Vielen Dank im Voraus und LG
Private Nachricht senden Benutzer-Profile anzeigen
 
entenhausen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 06.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2013, 13:28     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo entenhausen,

Wenn ich es richtig verstehe, wäre es recht kompliziert ein "Verrutschen" zu bewerkstelligen, so dass dieses Detail eher verwirrt als zur Lösung beiträgt.

So weit ich es verstehem löst mein Code Dein Problem also bereits. Du hast nun noch die Information gegeben, dass die 593 Elemente in einer Spalte orientiert sind, während ich von einer Zeile ausging. Aber das ist leicht anzupassen.

Ist die Frage damit gelöst?

Gruß, Jan


Oh, hatte nicht gesehen, dass du bereits geantwortet hattest. Ehrlich gesagt kann ich deinen Code noch nicht ganz nachvollziehen.
was genau meinst du hiermit?
Code:
  C{k} = data(:, 1 + (k-1) * w:k*w);


Ich konnte das noch nicht übertragen.

LG
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: 11.09.2013, 13:39     Titel:
  Antworten mit Zitat      
Code:
C{k} = data(:, 1 + (k-1) * w:k*w);
 

das ist die unterteilung in abschnitte der länge 100 und das speichern dieser abschnitte in der cell C. wenn die vektoren nicht immer gleich lang sein sollen dann dann musst das das umschreiben.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 11.09.2013, 13:53     Titel:
  Antworten mit Zitat      
entenhausen hat Folgendes geschrieben:

Code:
data=[A]; %Matrix A mit der Dimension 593x2
a=data(1:119);
b=data(120:238);
c=data(239:357);
d=data(358:475);
e=data(476:593);

 


Das geht aber nicht...

... natürlich geht das! Wo sitzt da nur der Fehler? Twisted Evil

probier mal
Code:
data=[A]; %Matrix A mit der Dimension 593x2
a=data(1:119,:);
b=data(120:238,:);
c=data(239:357,:);
d=data(358:475,:);
e=data(476:593,:);

 


lg
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
entenhausen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 06.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2013, 14:42     Titel:
  Antworten mit Zitat      
aaah selbstverständlich, jetzt klappt das! Vielen Dank!
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: 11.09.2013, 16:07     Titel:
  Antworten mit Zitat      
Hallo entenhausen,

Du hast noch nicht eindeutig erklärt, wie groß die einzelnen Abschnitte sein sollen. Aus dem in der ertsen Nachricht auftauchenden "x100, y100" habe ich geraten, dass Du Blöcke mit 100 Elementen bekommen möchtest.

Zur Bedeutung von:
Code:
C{k} = data(:, 1 + (k-1) * w:k*w);

Probiere es doch einfach mal aus. Kopiere den Code in ein M-File und setze einen Breakpoint in diese Zeile. Dann starte die Funktion. Wenn Matlab beim Breakpoint anhält, gib die einzel-Teile des Befehls im Command Window ein:
Code:
1+(k-1)*w
k*w
1+(k-1)*w:k*w
data(:, 1+(k-1)*w:k*w)

Zum Schluß wird das in das k.te Cell-Element von C geschrieben.

Matlab ist nicht einfach, aber man kann es in so kleine Stückchen zerlegen, dass jeder einzelne Schritt fast trivial ist.

Das Problem ist immer noch nicht klar definiert. Ich schlage vor, Du versuchst es noch einmal so präzise wie möglich aufzuschrieben. Denn eine ganz exakte Definition ist bereits eine zu 98% fertige Implementierung in einer Programmiersprache.

Gruß, Jan
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.