|
|
| sbmiles21 |

Forum-Fortgeschrittener
|
 |
Beiträge: 68
|
 |
|
 |
Anmeldedatum: 16.02.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.07.2012, 10:48
Titel: große matrix zerlegen
|
 |
Hallo,
gibt es eine schnelle Möglichkeit eine Matrix mit 2Mio. rows schnell in 2 Matrizen zu zerlegen?
Prob.: Ich muss diese Matrix in excel speichern.
Excel2007 kann jedoch pro sheet nur 1Mio Zeilen verarbeiten.
Wollte nun die 2Mio. Matrix in 2 x 1Mio Matrizen teilen und diese dann seperat in 2 Excel Dateien speichern.
Mein Code sieht so aus:
Dauert jedoch zu lange
Hat jemand einen Tip?Vielleicht sowas wo man nicht jede einzelne Zeile via Schleife durchlaufen muss?
Danke
Gruss
|
|
|
|
|
|
| Kascho |

Forum-Century
|
 |
Beiträge: 195
|
 |
|
 |
Anmeldedatum: 24.03.10
|
 |
|
 |
Wohnort: Jena
|
 |
|
 |
Version: R2008b ... :(
|
 |
|
|
 |
|
Verfasst am: 02.07.2012, 11:08
Titel:
|
 |
Hallo sbmiles,
Denke nicht das du die Schleifen brauchst, Versuch mal was in diese Richtung:
Das funktioniert für eine Gerade Anzahl von Elementen in m. Für eine ungerade Anzahl muss wohl noch etwas an dem index geschraubt werden.
Gruß, Kascho
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 02.07.2012, 15:25
Titel: Re: große matrix zerlegen
|
 |
| |
 |
|
Hallo sbmiles21,
Dein Code ist ein schönes (und seltenes!) Beispiel für wirklich langsame Schleifen in Matlab. Allerdings ist das Schreiben des aktuellen Wertes mit "y" bzw "y2" bereits eine der Haupt-Zeitverschwender. Zudem fehlt die Pre-allocation. Das bedeutet, dass Matlab zunächst ein [1x1] Array erzeugt, dann in der nächsten Iteration ein [1x2] Array und das erste Element kopiert, dann ein [1x3] Array und die ersten beiden Elemente kopiert etc. Insgesamt wird deshalb von Betriebssystem nicht Speicher für 1048575 Elemente angefordert, sondern für SUM(1:1048575), fast ebensoviele Elemente werden zwischenzeitlich umherkopiert. Klar, dass das lange braucht, oder?
Deine zweite Schleife hat 2 Bugs: 1, Das Element 1048575 wird bereits in der ersten Schleife behandelt, 2. "b.energy2_safe_2(y, :)" beginnt beim element 1048575 und füllt alles davor mit Nullen auf - danach ist das Array wieder zu groß.
Besser:
Das wäre schonmal deutlich schneller. Matlab kann aber, wie Kascho schon angedeutet hat, die Kopie viel schneller "vektorisiert" erzeugen:
Und das ist dann knackig, oder? Ich mag Matlab für solche kompakten Ausdrücke.
Gruß, Jan
|
|
|
|
| sbmiles21 |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 68
|
 |
|
 |
Anmeldedatum: 16.02.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.07.2012, 16:31
Titel:
|
 |
geile Sache !
Ich danke euch!
Manman das man nicht selber drauf kommt ;( , aber da fehlt wohl die Erfahrung
Danke nochmal
|
|
|
|
|
|
|
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.
|
|