|
|
mehrere Dateinamen in einzelne Variable einlesen |
|
MoTSCHIGGE |

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 22.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.02.2013, 20:21
Titel: mehrere Dateinamen in einzelne Variable einlesen
|
 |
Hallo,
kann mir jemand sagen, was ich hier falsch mache:
Ich möchte einfach die 4 Dateinamen oben in die Variable "namen" einlesen (soll ein cell array werden). Ich bekomme immer die Meldung "Subscripted assignment dimension mismatch."
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 27.02.2013, 23:35
Titel: Re: mehrere Dateinamen in einzelne Variable einlesen
|
 |
Hallo MoTSCHIGGE,
Es tut immer weh, wenn jemand Indices in die Namen von Variablen schmuggelt. Das mach immer unnötig viel Ärger und das Herumwursteln mit EVAL ist fehleranfällig. Ich rate dringend davon ab, da es immer eine bessere und effizientere Möglichkeit gibt.
Trotzdem liegt das Problem in Deinem Code an den Klammern: Cells benötigen geschweifte Klammern. Mit den Runden Klammern wird ein DOUBLE Array erzeugt und die Fehlermeldung kommt daher, dass man den Vektor auf der rechten Seite nicht in ein einzelnes Element auf der linken Seite schreiben kann.
Obwohl dann "name" und "namen" eigentlich identisch sind, sodass "namen=name" gereicht hätte. Zur Not, aber nur dann, könnte rechts auch das EVAL stehen bleiben.
Gruß, Jan
|
|
|
MoTSCHIGGE |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 22.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.02.2013, 23:54
Titel:
|
 |
Ok vielen Dank! So funktionierts.
Wofür brauche ich eigentlich die Pre-allocation? Ohne scheints auch nicht langsamer zu gehen.
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 28.02.2013, 10:08
Titel:
|
 |
|
 |
|
Hallo MoTSCHIGGE,
Bei 4 Elementen ist eine Pre-allocation nicht messbar schneller. Aber es lohnt sich von vornherein einen sauberen Programmierstil zu verwenden, weil das Gehirn das am besten lernt, was es immer wieder trainiert.
Wenn man statt 4 z.B. 100'000 Elemente in ein Array schreibt, muss bei jedem Anhängen eines Elements zunächst ein gesamter neuer Block im Speicher allozioert werden, dann werden die alten Daten kopiert und das neue Element angefügt. Bei einem [1 x 100000] Array vom Typ DOUBLE fordert man insgesamt SUM(1:100000)*8 Bytes vom Betriebssystem an und kopiert ebensoviele Bytes. Und das sind 5'000'050'000, also mehr als 5 GigaByte. Und das bemerkt man schon in der Laufzeit, obwohl die modernsten Matlab Versionen versuchen, das Problem abzudämpfen (wohl indem sie provisorisch mehr Speicher reservieren als benötigt). Zwar wirde der Speicher immer wieder freigegeben, aber bevor er wiederverwendet werden kann, muss er zunächst mit Nullen überschrieben werden.
Deshalb die einfache Regel: Alle Arrays werden pre-alloziert.
Gruß, Jan
|
|
|
MoTSCHIGGE |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 22.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.02.2013, 10:30
Titel:
|
 |
Vielen Dank für die ausführliche Antwort! Genau das wollte ich wissen.
Grüße
Daniel
|
|
|
|
|
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.
|
|