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

nicht voll besetzte Cell Arrays in Matrix umwandeln?

 

Maggi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2008, 17:25     Titel: nicht voll besetzte Cell Arrays in Matrix umwandeln?
  Antworten mit Zitat      
hi,

ich habe ein Anfänger-Problem:

Ich habe ein 1x9 Cell-Array (hier "import"), von dem 7 der Spaltenvektoren zu einer Matrix "Mat" zusammengefasst werden sollen. Die Vektoren haben NICHT die gleiche Länge. mit cell2mat funktioniert irgendwie nicht(CAT arguments dimensions are not consistent. )
ich hoffe ihr könntet mir weiterhelfen
Embarassed
vielen Dank im Voraus
Grüße


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 26.11.2008, 18:15     Titel:
  Antworten mit Zitat      
Hallo Maggi,

es ist leider noch nicht ganz klar, was du am Ende bekommen möchtest.
wieder ein Spaltenvektor? Matrix?

Ansonsten liegt es daran, dass deine Spaltenvektoren nicht gleich lang sind.


Code:

A=cell(1,9);
A([1,3:5,7:9])={zeros(3,1)};
%
% spaltenweise zusammenfassen kann man wie folgt
% Achtung Spaltenvektoren müssen gleich lang sein
a= cell2mat(A)
b= cat(2,A{:})
c=  [A{:}]

%
% zeilenweise zusammenfassen  kann man wie folgt
% Achtung Zeilenvektoren müssen gleich lang sein
d= cat(1,A{:})

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Clausen
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 07.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.02.2009, 16:58     Titel:
  Antworten mit Zitat      
Hallo,

ich habe genau das Problem, dass meine Spaltenvektoren unterschiedlich lang sind. Ich wollte das Problem versuchen so zu lösen; die kürzeren Vektoren mit Nullen auffüllen, oder eine zero-Matrix erstellen und die einzelnen Spalten der Cell-Array in die Matrix einfügen. Das krieg ich aber leider nicht hin, beziehungsweise bekomme Fehlermeldungen. Habt Ihr da noch Ideen?

Grüße Claus
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.02.2009, 17:28     Titel:
  Antworten mit Zitat      
Gibt es ein kleines Beispiel oder Code mit dem man starten könnte?
 
Clausen
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 07.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.02.2009, 17:47     Titel:
  Antworten mit Zitat      
Ja gern. Ich hab ein Cell- Array (1x47). In jeder Zelle steht nur ein Vektor drin, die aber unterschiedlich lang sind ( von 721 bis 740 Zeilen)
Was ich am Schluss raushaben möchte, ist eine Matrix in der alle Spaltenvektoren dess Cells drin stehen, also für dieses Cell eine 740x47 Matrix.
Private Nachricht senden Benutzer-Profile anzeigen
 
Clausen
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 07.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.02.2009, 17:51     Titel:
  Antworten mit Zitat      
Nachtrag:
also die fehlenden Einträge in den Spalten, die < 740 Zeilen haben, sollen dann Nulleinträge haben
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.02.2009, 18:01     Titel:
  Antworten mit Zitat      
Also etwa sowas:
Code:
c={ (2:3)' (1:3)' (1:5)'}
?
Ist es egal, ob man Nullen (oder NaNs) 'vorne' oder 'hinten' einfügt?
 
Clausen
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 07.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.02.2009, 18:10     Titel:
  Antworten mit Zitat      
Kann dir leider nicht ganz folgen Sad (Unbalanced or unexpected paranthesis or brackets)
Zu deiner Frage: Nullen sollten es sein und ob oben oder unten ist egal so lange es einheitlich für alle Spalten ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.02.2009, 20:24     Titel:
  Antworten mit Zitat      
Ein erster Versuch:
Code:
c={ (2:3)' (1:3)' (1:5)' (1:7)' (2:4)'}

lmax=max(cellfun(@length,c));
ncol=cellfun(@length,c);
matrix=zeros(lmax,numel(c));
for k=1:numel(ncol)
    matrix(1:ncol(k),k)=c{k}; % vorn einfügen
end
matrix

matrix=zeros(lmax,numel(c));
for k=1:numel(ncol)
    matrix(end:-1:end-ncol(k)+1,k)=flipud(c{k}); % hinten einfügen
end
matrix
 
Clausen
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 07.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.02.2009, 10:44     Titel:
  Antworten mit Zitat      
Hallo,

ich hab deinen Code gerade ausprobiert. Läuft sehr gut. Die Funktion cellfun war mir noch nicht bekannt.

Vielen Dank, du hast mich wieder ein gutes Stückchen weitergebracht.

Gruß
Claus
Private Nachricht senden Benutzer-Profile anzeigen
 
hboeth
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 65
Anmeldedatum: 01.07.10
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 20.04.2011, 11:53     Titel:
  Antworten mit Zitat      
Hallo,
ich stehe vor dem selben Problem, allerdings habe ich ein 3dim cell.
Weiß jmd, wie man das lösen kann?

Danke
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.