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

multiplikation von Cell

 

babsi83

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2014, 22:06     Titel: multiplikation von Cell
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein 1x5 cell, dass 1x360 vektoren enthält. Ich möchte jetzt gerne den Vektor des 5. cells mal (-1) nehmen.

Code:

cellArr{5}*-1;
 


nur bekomme ich da jetzt die fehlermeldung 'exceeds matrix dimension'. Ich versteh aber nicht warum! Vielleicht kann mir da von euch profis einer weiterhelfen Smile

Danke schonmal.
B.


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.08.2014, 22:25     Titel:
  Antworten mit Zitat      
Hallo,

sollte gehen. Bitte nochmal die Dimensionen überprüfen.

Ansonsten lassen sich solche Probleme am besten anhand eines reproduzierbaren Beispiels lösen.

Grüße,
Harald
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: 02.08.2014, 13:55     Titel: Re: multiplikation von Cell
  Antworten mit Zitat      
Hallo babsi83,

Die Fehlermeldung ist eindeutig: "cellArr" enthält weniger als 5 Elemente. Doe Annahme, es sei ein 1x5 cell ist nicht richtig.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2014, 18:37     Titel:
  Antworten mit Zitat      
Hallo Jan,

Es ist ganz sicher ein 1x5 Array. Wenn ich dem 5. Array einen Wert zuweise greift matlab darauf zu. Auch wenn ich mir den Vektor ausgeben lassen will, wird es mir ausgegeben.

Lg.
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2014, 17:58     Titel:
  Antworten mit Zitat      
guten Tag,

ich habe ein ähnliches Problem und stell meinen Beitrag mal hier dazu Smile

Mein Cell ist 1x9 lang und enthält vektoren. Einige Cells/Vektoren möchte ich jetzt *(-1) nehmen und bekomme die gleiche Fehlermeldung wie weiter oben schon beschrieben.

Code:


for i = 1:len %=9
     mittelwert{i} = abs(nanmean(ein{i}(5:89,:))); %mittelwert enthält 9 cells mit 1x500 Vektoren
     mittelwert{4}*-1;
     mittelwert{5}*-1;

%noch viele zeilen code
...
...
...

end

 


Ich glaube auch zu wissen, warum ich die Fehlermeldung bekomme - die schleife läuft doch zuerst für i = 1, dann für i = 2 usw. durch. Und beim 1. Durchgang gibt es noch keinen mittelwert{4} - oder?
Falls das der richtige Grund ist, verstehe ich nicht, warum es Funktioniert, wenn ich einen Skalar zuweise.

Code:


for i = 1:len %=9
     mittelwert{i} = abs(nanmean(ein{i}(5:89,:))); %mittelwert enthält 9 cells mit 1x500 Vektoren
     mittelwert{4} = -145;
     mittelwert{5} = -67;

%noch viele zeilen code
...
...
...

end

 


So funktioniert es!

Vielleicht kann wer helfen, bzw. gibt es eine elegante Methode das Problem zu lösen, ohne die Schleife nach

Code:

mittelwert{i} = abs(nanmean(ein{i}(5:89,:)));
 


zu beenden, die Zuweisung machen und dann eine neue Schleife beginnen?

Vielen Dank!!

glg.
tommy
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 06.08.2014, 22:33     Titel:
  Antworten mit Zitat      
Diese Codezeile

Code:
mittelwert{4} = -145;


ist im Gegensatz zu

Code:
mittelwert{4} *-1;


eine Zuweisung. Es muss nur die Variable mittelwert existieren, nicht aber die 4. Zelle. Da mit i = 1

Code:

for i = 1:len %=9
mittelwert{i} =...


auf jeden Fall die Variable mittelwert angelegt wird, fügt MatLab beim Ausführen von
Code:
mittelwert{4} = -145;


die fehlenden Zellen einfach automatisch mit
Code:
mittelwert{2} = [];
mittelwert{3} = [];
 


hinzu. Bei
Code:
mittelwert{4} *-1;
wird aber eben nicht vorher die fehlenden Zellen eingefügt und MatLab weiß ja auch gar nicht mit was die 4. Zelle mit -1 multiplizieren soll. Daher kommt dann auch die Meldung "??? Index exceeds matrix dimensions."

Zu deiner 2. Frage kann ich nichts sagen, da mir schlicht weg schleierhaft ist, was dieser Code erzeugen soll.

Man sollte definitiv Variablen immer vor der Schleife anlegen, da dies auch die Ausführungszeit verkürzt. Z.B.

Code:
mittelwert = cell(n,m); % Leere Zellen der Größe nxm
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.