ich bin absoluter Matlab Neuling und soll ein kleines Programm schreiben.
Problemstellung ist: Matrix 28x28. Zur weiteren Bearbeitung müsste ich diese in 14x14 =196 Matrizen zerlegen, d.h. immer 2pro Reihe und Spalte sollten zusammengefasst werden.
hier mal ein Beispiel wie ich das meine
% Ausgangsmatrix ist 5x5 und wird um jeweils eine Zeile und Spalte gekürzt
a=xlsread('Mappe1.xlsx');
b=a(1:4,2:5);
c=b(1:2,1:2);
d=b(1:2,3:4);
Dieser Code funktioniert zwar, ist aber bei 196 Matrixen recht aufwändig und umständlich. Gibt es da irgendeine schnellere Lösung mit irgendwelchen Schleifen?
für ind zwischen 1 und 196 die verschiedenen Matrizen abgreifen. Zuerst werden die ersten beiden Spalten von A von oben nach unten abgearbeitet, dann die nächsten beiden Spalten usw.
Danke für deine Antwort.
Habe den Befehl natürlich ausprobiert und er läuft. Er erstellt mir auch wie erwünscht 196 Matrizen, aber nicht so wie ich sie bräuchte.
So wie du mir das geschrieben hattest, arbeitet Matlab einfach jede Spalte von oben nach unten ab und fast immer 4 zu einer Matrix zusammen.
Die Matrizen die ich bräuchte müssten aber aus:
Reihe 1 --> 1.+2. Element und
Reihe 2 --> 1.+2. Element bestehen.
danach dann Reihe 1--> 3.+4. und Reihe 2 --> 3.+4.
genau so dann auch für die Reihen 3 bis 28
Hoffe du verstehst was ich meine. Und über die Antwort habe ich mich auch gefreut und gleich eifrig rumgebastelt.
heute Morgen hatte ich kurz reingeschaut und da er mir das C rot unterstrichen anzeigt, dachte ich es funktioniert nicht. Daher hatte ich etwas veraendert das nicht lief.
Eben habe ich es mal so eingegeben wie du es gepostet hast und es laeuft.
Um kurz hinter die Mathematik zu steigen... du hast Matlab damit gesagt, das es so etwas wie eine Reihe erzeugen soll. du sagst:
2*j-1:2*j --> also fuer 1 =1 und 2
und fuer 2 =3 und 4
aber was hast du mit der neuen Matrix gemacht?
C(:,:,(j-1)*14+k)
Danke auf jeden Fall mal dafuer
ok ok...habe mich eben mal in ner ruhigen Minute dait auseinander gesetzt. Wie gesagt bin Matlab Anfaenger und muss Sachen verstehen bevor ich sie mir effektiv merken kann. Wieso kann Matlab fuer deinen Befehl der von 1 bis 196 geht, 196 Matrixen erzeugen und wenn ich eingebe C(:,:,j*k) nicht? Es erzeugt zwar 196 Matrixen aber alle bis auf die letzte sind leer?
Falls jemand mir das erklaeren kann waere ich sehr dankbar, weil ich denke das es ein grundlegendes Verstaendnisproblem ist
Hm, kannst Du Deinen Code mal hier rein posten, dann waere es um ein Vielfaches leichter, ihn zu kommentieren :)
j*k als Index ist aber sowieso nicht zielfuehrend, aus einem einfachen Grund:
j*k und k*j sind das gleiche. Wenn Du beispielsweise aus den Zeilen 7 und 8 (j = 4) die Spalten 3 und 4 (k = 2) extrahieren willst, beschreibst Du die selben Elemente von C wie wenn Du die Zeilen 3 und 4 (j = 2) und die Spalten 7 und 8 (k = 4) extrahierst. Dadurch ueberschreibst Du einerseits bereits vorhandene Werte, andererseits befuellst Du nicht alle Elemente von C.
Meine bisher einzige Idee, wieso nur die j*k-te Untermatrix befuellt wird, waere, dass Du in Deiner Schleife C jedes Mal neu mit Nullen initialisierst.
Sorry, dass ich die mathematischen Fachbegriffe nicht drauf hab, ist leider schon ein paar Jahre her :D
Ziel ist es jetzt aus diesen neugeschaffenen Matrizen wieder eine zu machen. Grund fuer die ganze Arbeit war, das wir verschiedene Datensaetze haben die von der Groesse her anneinander angepasst werden mussten/muessen
Wenn du den Code benutzen moechtest, dann nehme anstatt der Matrix B gerade magic(2
Vielen Dank Patrick
Einstellungen und Berechtigungen
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.