WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Error: ??? Subscripted assignment dimension mismatch.

 

Platin
Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2010, 14:56     Titel: Error: ??? Subscripted assignment dimension mismatch.
  Antworten mit Zitat      
Hallo an Alle,

ich habe folgendes Problem mit einer Schleife:

Code:

for xx=1:3
for ii=1:5
   
M(:,:,ii)=dlmread(pfad,name(xx)),'',3,0);

end;
end;
 


Ich bekomme obige Fehlernachricht.
also die Sache ist das der erste Durchlauf problemlos funktioniert.
Beim 2. mal erhalte ich diese Fehlernachricht.
Das Problem liegt wahrscheinlich daran das beim 2. Durchlauf die Dimension der Matrix eine andere ist.
Beim 1. Durchlauf ist es eine 2700x100x5 Matrix und beim 2. Durchlauf eine 1700x100x5 Matrix und beim 3. Mal wieder eine andere.
Ich weiß aber nicht wie das Problem lösen kann.
Damals hatte ich das Problem nicht und das ganze lief, weil ich da bei jedem Durchlauf die selbe Dimension hatte.
Hatte von euch schonmal das Problem und weiß vllt. Rat ?

Ich danke euch.

Frohes Fest
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.12.2010, 15:23     Titel: Re: Error: ??? Subscripted assignment dimension mismatch.
  Antworten mit Zitat      
Hallo Platin,

Wenn die einzelnen Matrizen unterschiedliche Dimensionen haben, kannst Du sie nicht in einem DOUBLE-Array zusammenfügen. Ein CELL-Array kann das aber:

Code:

C = cell(3, 5)
for xx=1:3
  for ii=1:5
    C{xx, ii} = dlmread(pfad, name(xx)), '', 3, 0);  % ???
  end
end
 

Ich bin verwundert, das "dlmread(pfad, name(xx)), '', 3, 0);" funktionieren soll. Ich nehme an, dass soll so lauten:
Code:

    C{xx, ii} = dlmread(fullfile(pfad, name{xx}), '', 3, 0);
 

Allerdings hängt der DLMREAD-Befehl gar nicht von ii ab. Das verwirrt mich ein wenig.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2010, 15:38     Titel:
  Antworten mit Zitat      
Hey,

danke für deine Antwort.
Das sind leider schlechte Nachrichten für mich, da ich ein ca 500 Zeilen langes skript habe und dieser Fehler hier ganz am Anfang auftaucht. Alle meine folgenenden Befehle bauen auf dieser Matrix auf.
Das heißt es ist quasi unmöglich das gesamte Skripte nun für Cell-Arrays umzuschreiben.
Ok, jetzt weiß ich jedenfalls so viel, das es nicht möglich ist.

Grüße
Frohes Fest
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.12.2010, 15:42     Titel:
  Antworten mit Zitat      
Hallo Platin,

"Möglich" ist es schon. Dann müsstest Du z.B. das Array mit ZEROS initialisieren und der Rest der Funktion müsste dies überschüssigen Nullen ignorieren. Oder NaN's könnten auch eine Lösung sein, um die kleineren Arrays aufzufüllen.
Beides würde aber auch Änderungen im Rest der Funktion erfordern.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2010, 15:46     Titel:
  Antworten mit Zitat      
Hey, danke für deine Antwort.
Aber das klingt für mich sehr kompliziert.
Ich denke nicht dass das so einfach gehen wird.
Ich hätte gedacht, dass man einfach jedes mal bevor er sich die matrix M erstellt, die alte löscht oder sowas. Geht sowas nicht ?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 03.01.2011, 14:24     Titel:
  Antworten mit Zitat      
klar du kannst mit
Code:
die Matrix ja löschen und die Erstellung der Matrix setzt du einfach auch mit in die Schleife.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.