|
|
Elgenates Befüllen einer Matrix |
|
Gigastorm |

Forum-Anfänger
|
 |
Beiträge: 14
|
 |
|
 |
Anmeldedatum: 07.10.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.11.2015, 00:58
Titel: Elgenates Befüllen einer Matrix
|
 |
Elgenates Befüllen einer Matrix:
Ich soll als Aufgabe möglichst elegant die Matrizen:
generieren.
Das Ziel der Aufgabe ist jetzt nicht
Zitat: |
A=[[1:4];[6:9];[11:14];[16:19]] |
zu programmieren, sondern es so zu programmieren, dass es schnell auf hohe Zeilenanzahl erweitert werden kann. Habt ihr einen Tipp für mich?
Bei der zweiten Matrix wird das Minus "schachbrett"-mäßig verteilt also multipliziert mit dem Faktor wobei i die Zeile und j die Spalte ist.
Den Vektor [1,2,3,4,6,7,8,9,11,12,13,14,16,17,18,19] kann ich erzeugen durch:
Aber eine Schleife ist ja nun auch nicht effizient (Vektorisierung ist immer schneller und vorzuziehen) und wie füge ich das in meine 4x4-Matrix ein?
|
|
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 13.11.2015, 11:10
Titel:
|
 |
gibt da einige varianten.
du könntest zb mit
reshape
arbeiten die spalte mit den 5end abschneiden. man könnte auch mit
bsxfun
und @plus arbeiten.
für das schachbret hast du ja schon den
mod
befehl gefunden.
gibt bestimmt noch viel mehr lösungen
_________________
richtig Fragen
|
|
|
Mmmartina |

Forum-Meister
|
 |
Beiträge: 745
|
 |
|
 |
Anmeldedatum: 30.10.12
|
 |
|
 |
Wohnort: hier
|
 |
|
 |
Version: R2020a
|
 |
|
|
 |
|
Verfasst am: 13.11.2015, 11:28
Titel:
|
 |
Ich würde an deiner Stelle einfach mal die Array Manipulation - Befehle in der Matlabhilfe durchschauen. Da solltest du fündig werden. (Functions -> Mathematics -> Arrays and Matrices -> Array Manipulation)
_________________
LG
Martina
"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
|
|
|
Gigastorm |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 14
|
 |
|
 |
Anmeldedatum: 07.10.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.11.2015, 12:59
Titel:
|
 |
Hallo,
Danke schonmal! Entschuldigung für die späte Antwort.
Folgende Code funktioniert. Geht es eleganter?
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 20.11.2015, 13:52
Titel:
|
 |
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 20.11.2015, 14:48
Titel: Re: Elgenates Befüllen einer Matrix
|
 |
|
 |
|
Hallo Gigastorm,
Dass Vektorisieren immer schneller ist als Schleifen ist ein Gerücht, das aus den Zeiten von vor Matlab 6.5 stammt, also seit mehr als 10 Jahren nicht mehr Stand der Technik ist. Matlab's JIT-Acceleration kann Schleifen drastisch beschleunigen, wenn man einige Regeln berücksichtigt. Und dann ist die Größe der temporär erzeugten Arrays der limitierende Faktor und Schleifen haben eher die Möglichkeit vollständig im Processor-Cache abzulaufen ohne auf das langsame RAM zuzugreifen.
In Deinem Fall ist das jedoch unerheblich, da es nur um Micro-Sekunden geht.
Anmerkung:
Zitat: |
A=[[1:4];[6:9];[11:14];[16:19]];
% Besser:
A=[1:4; 6:9; 11:14; 16:19]; |
"a:b" ist bereits ein Vektor, so dass man es nicht per [] Operator horizontal verbinden muss.
Elemente in einer Schleife aus einem Array zu löschen ist extrem resourcen-verzehrend. Denn es wird jedesmal ein neues Array erzeugt und die Daten des alten kopiert. Hier ist Vektorisierung besser:
Dabei wird "linear indexing" verwendet. Es lohnt sich, dies mal genauer anzuschauen. Und so kann man auch das Vorzeichen ändern:
Den letzten Schritt habe ich mal weggelassen.
Viel Erfolg, Jan
Zuletzt bearbeitet von Jan S am 21.11.2015, 14:08, insgesamt einmal bearbeitet
|
|
|
Gigastorm |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 14
|
 |
|
 |
Anmeldedatum: 07.10.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.11.2015, 19:57
Titel:
|
 |
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|