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

Zeilenvektor in eine bestimmte i,j-Matrix überführen mit..

 

gomat
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 31.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2011, 03:00     Titel: Zeilenvektor in eine bestimmte i,j-Matrix überführen mit..
  Antworten mit Zitat      
Hallo zusammen,

muss leider sagen, dass ich in Matlab noch unerfahren bin. Ich sitze seit geraumer Zeit an folgendem Problem und komme einfach nicht weiter, konnte hierzu auch nach langer Suche nichts im Forum finden. Ich bin für Vorschläge oder Denkanstöße sehr dankbar.

Ich wiill einen Zeilenvektor in eine i-Zeilen und j-Spalten Matrix nach folgendem Muster zerlegen: z.B. sei mein Zeilenvektor x=(1,2,3,4...20) dann möchte ich ein i für meine Spaltenanzahl der Matrix vorgeben können und dann für jedes i die gewünschten Matrix erhalten. z.B sei i=2:5. Dann sollte das Ergebnis wie folgt aussehen:
Für i = 2 : z=[1 2;3 4; 5 6; ... ;17 18;19 20]
i = 3 : z=[1 2 3; 4 5 6;...;18 19 20]
... i=5 : z= [1 2 3 4 5;....;16 17 18 19 20]

Schaffe nicht eine geeignete Schleife hinzubekommen (glaube das dies nur mit Hilfe einer Schleife gelöst werden kann)

habe erfolglos einiges versucht:
Code:
%Für ein vorgegebene Spaltenanzahl i = 4 klappts aber sonst nicht:
W=[ 1:40];
z=[];
i=10;
z=[W(0*i+1:i); W(1*i+1:2*i); W(2*i+1:3*i); W(3*i+1:4*i)];
und es auch mit reshape versucht:
z=reshape(W,10,4)' habe versucht i in reshape unterzubringen, was matlab aber nicht kennt
z.B: i=2:10;
l=length (W);
j=round(l/i);
z=reshape(W,j,i);

Will die Spaltenanzahl über einen Bereich laufen lassen und die dadurch erzeugten Matrizen erhalten.

Freue mich über jede Art von Hilfe riesig.
Viele Grüße gomat
Private Nachricht senden Benutzer-Profile anzeigen


Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2011, 06:50     Titel:
  Antworten mit Zitat      
Wie soll denn die Matrix für z.B. x = [1,2,3,4,5] und i = 2 aussehen? Die Anzahl der Elemente muss ja gleich bleiben. Man könnte mit NaN auffüllen oder ....
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 31.05.2011, 10:18     Titel:
  Antworten mit Zitat      
Hallo

so was in der Richtung:

Code:

x      = 1:20;
col    = [2,3,5];

size_x = length(x);
res    = cell(size(col));
for k = col
  reshapable = mod(size_x-1,k)+1;
  z = nan(1,size_x+(k-reshapable));
  z(1:size_x) = x;
  z = reshape(z,k,[])'
 
  res{col==k} = z;
end

res
 
Private Nachricht senden Benutzer-Profile anzeigen
 
gomat
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 31.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2011, 19:16     Titel: Danke
  Antworten mit Zitat      
Hallo,

Zuerst vielen Dank für eure Hilfe.

@Thomas84 habe ich vergessen mitzuschreiben, ich fülle mit Nullen auf

@denny das hilft mir schon ungemein weiter, danke soweit.
Eine Frage noch, wie kann ich erreichen dass ich für jedes i auch die dazugehörige Matrix aufrufen kann? Habe es erfolglos mit einer for-Schleife versucht.

Gruß gomat
Private Nachricht senden Benutzer-Profile anzeigen
 
gomat
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 31.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2011, 22:13     Titel: Matrizen speichern
  Antworten mit Zitat      
Das Problem mit den Matrizen speichern habe ich wie folgt lösen können:

Code:
eval( [['z' int2str(i)] '= z'] );


Nochmals vielen Dank für die Hilfe.

Gruß gomat
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: 01.06.2011, 10:08     Titel: Re: Matrizen speichern
  Antworten mit Zitat      
Hallo gomat,

Code:
eval( [['z' int2str(i)] '= z'] );

Davon rate ich (mal wieder) ausgeprochen und explizit ab. Mit EVAL dynamisch Variablen zu erzeugen ist eine Quelle unzähliger Probleme, wie man z.B. in diesem Forum gut nachlesen kann. Es macht das Program fehleranfällig, kompliziert und langsam. Ich habe ein paar Hundert Antworten zu diesem Thema auf goMatlab gegeben - bei Bedarf kannst Du ja danach suchen...
Besser:
Code:
Zcell{i} = z;


Viele Grüße, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 01.06.2011, 10:19     Titel: Re: Danke
  Antworten mit Zitat      
gomat hat Folgendes geschrieben:
Hallo,

das hilft mir schon ungemein weiter, danke soweit.
Eine Frage noch, wie kann ich erreichen dass ich für jedes i auch die dazugehörige Matrix aufrufen kann? Habe es erfolglos mit einer for-Schleife versucht.

Gruß gomat


Das habe ich dir doch auch aufgezeigt. Die Variable res war dazu gedacht. Zugreifen auf Matrizen kannst du über Geschweifte Klammer
res{1} => 1.Matrix; res{2}= >2.Matrix usw..
Private Nachricht senden Benutzer-Profile anzeigen
 
Dr.B.Hindert

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2011, 03:49     Titel:
  Antworten mit Zitat      
Hier mal meine Lösung:

Code:

x = 1:20;
x = x';

anz_spalten = 9;
rest = mod(length(x), anz_spalten);
if rest
    rest = anz_spalten - rest;
end
while rest > 0
    x(end+1) = 0;
    rest = rest-1;
end

y = zeros(anz_spalten, length(x)/anz_spalten);
for j =1:length(x)
    y(j) = x(j);
end

y=y'
 



Schöne Grüße,
B.Hindert
 
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.