Verfasst am: 09.07.2013, 14:46
Titel: An Matrix etwas anhängen
Hallo,
wenn ich an eine bestehende Matrix etwas anhängen will, wie gehe ich vor? Bzw. ich weiß schon wie ich vorgehe, bekomme aber einen Fehler!
Error using vertcat
Dimensions of matrices being concatenated are not consistent.
- Matrix A sei rand(10,5,50), wobei die 2. Spalte nur aus 0en und 1en besteht
- Matrix B sei 2spaltig mit 5 Werten pro Spalte
Spalte 2 der Matrix A besteht aus 0 oder eins.
Jetzt möchte ich bei 0 die Werte der Spalte 1 von Matrix B HINTEN an die jeweilige Zeile von Matrix A anfügen (mittels transpose (') kriege ich die Spalte als Zeilenvektor, soweit klar)
ALT ALT ALT ALT NEU NEU NEU NEU
ALT ALT ALT ALT NEU NEU NEU NEU
ALT ALT ALT ALT NEU NEU NEU NEU
ALT ALT ALT ALT NEU NEU NEU NEU
ALT ALT ALT ALT NEU NEU NEU NEU
ALT ALT ALT ALT NEU NEU NEU NEU
Aber irgendwie krieg ich das nicht gebacken?
Forschleife mit 1-50, abfragen mittels IF ob Wert 0 oder 1 sei und jeweils befüllen (IF + ELSE). Die Theorie ist mir klar, nur mit der Matlabausführung haperts leider.
Verfasst am: 09.07.2013, 15:03
Titel: Re: An Matrix etwas anhängen
Chris_toph hat Folgendes geschrieben:
- Matrix A sei rand(10,5,50), wobei die 2. Spalte nur aus 0en und 1en besteht
- Matrix B sei 2spaltig mit 5 Werten pro Spalte
Spalte 2 der Matrix A besteht aus 0 oder eins.
Jetzt möchte ich bei 0 die Werte der Spalte 1 von Matrix B HINTEN an die jeweilige Zeile anfügen
ALT ALT ALT ALT NEU NEU NEU NEU
ALT ALT ALT ALT NEU NEU NEU NEU
ALT ALT ALT ALT NEU NEU NEU NEU
ALT ALT ALT ALT NEU NEU NEU NEU
ALT ALT ALT ALT NEU NEU NEU NEU
ALT ALT ALT ALT NEU NEU NEU NEU
Quellcode wäre schön gewesen, aber ich vermute, der Fehler wird entstehen, weil du versucht, unterschiedlich lange Zeilen innerhalb der Matrix zu erzeugen.
Allerdings werde ich aus dem, was du oben beschrieben hast, nicht ganz schlau.
Du möchtest Spalte 2 von A durchgehen. Sobald eine 0 dort steht, möchtest du:
- die Werte B(:,1) an A anhängen (das steht nicht expliziet da)?
- B(:,1) soll also ein Zeilenvektor werden und an A(x,end+1) angehangen werden?
Wenn B aber fünf Werte pro Spalte hat und A fünf Werte pro Zeile, was sagt mir dann die obige "Matrix" mit den ALT und NEU Einträgen?
Sinnvoll wäre es, die Matrix A gleich vorher zu vergrößern auf A(10,10,50), und diese neuen Zeilen mit NaN oder 0 (je nach Wunsch) vorzubelegen.
Denn auch wenn ein Eintrag von A(x,2) keine 0 enthält müssen Elemente in dieser Zeile in der MAtrix A vorhanden sein.
Dann läßt du deine Schleife drüber laufen.
_________________
LG
Martina
"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Allerdings werde ich aus dem, was du oben beschrieben hast, nicht ganz schlau.
Du möchtest Spalte 2 von A durchgehen. Sobald eine 0 dort steht, möchtest du:
- die Werte B(:,1) an A anhängen (das steht nicht expliziet da)?
Ja genau!
Zitat:
- B(:,1) soll also ein Zeilenvektor werden und an A(x,end+1) angehangen werden?
Wenn B aber fünf Werte pro Spalte hat und A fünf Werte pro Zeile, was sagt mir dann die obige "Matrix" mit den ALT und NEU Einträgen?
Die ist nicht genau, ich wollte nur anzeigen wohin die Werte kommen sollen.
Ich bastle gerade. Wenns nicht hinhaut, frage ich nochmal!
Du greifst definitiv falsch auf A zu.
Die Laufvariable i (bitte nicht i nutzen, denn damit überschreibst du das komplexe i, benne es um in iA oder sowas) geht nur bis 10 -denn du willst damit dort auf die Zeilen zugreifen!
Du musst, wenn du mit Schleifen arbeitest meiner meinung nach zwei schleifen nutzen:
Code:
1. Schleife über die Teilmatritzen A(:,:,1:50) 2. Schleife über jede Zeile der Teilmatrix A(1:10,:,:)
Du nutzt dort ein Semikolon, welches bewirkt, dass du an A eine neue Zeile anhängst. Was nicht geht, da B nur 6 Elemente hat, A aber 10!
Außerdem vermischst du gerade deinen und meinen Ansatz:
Ich hatte die Matrix vorher vergrößert (vordefiniert) und mit NaN belegt. Denn es stand nicht da, was passiert, wenn der Wert nicht 0 ist.
Du aber schreibst entweder die 1. oder die 2. Spalte von B in A. Und hängst es an die Zeile an!
Code:
%entweder, ohne vergrößern von A mit NaN
A = [A(iA1,:,iA3); B(:,1)'];
%oder mit vergrößern mit NaN
A(iA1,6:11,iA3) = B(:,1)'
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
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.