Verfasst am: 13.11.2014, 20:07
Titel: Spalten addieren von verschachtelten Cell-Array
Hallo,
ich hab im schon etwas im Forum umgeschaut aber nichts passendes gefunden.Ich hab ein 1x1 cell array mit 1x19 cell array inhalt.Die Spalten von dem 1x19 cell array sind jeweils 2688x1 groß.
Mein Probelm: Wie addiere zb die 3,7,11 und 15 Spalte von diesem 1x19 cell array.Irgend jemand eine Idee? Würde mich sehr freuen
wie vermutet befinden sich in Deinem 1x19 Cell Array keine Vektoren, sondern weitere Zellen.
In diesen Cell-Arrays, sind wiederum ebenfalls keine Zahlen, sondern Strings.
Die Strings stellen zwar Zahlen dar, haben aber als Dezimaltrennzeichen ein Komma.
Was Du also tun musst ist:
1. Kommas durch Punkte ersetzen
2. Strings in Zahlen umwandeln
3. Cell-Array in einen Vektor umwandeln
Ps.: Du solltest jedoch in Erwägung ziehen, Deine Daten von vorn herein effizienter anzuordnen. Schau Dir in dem Beispiel einfach mal den Speicherbedarf von c3 und d3 an ...
Vielen Dank für die beiden Antworten hat mich sehr gefreut und beides funktioniert einwandfrei Die eingelesene Datei ist eine csv-Datei.
Ich hätte aber noch eine zweite Frage und zwar wenn jetzt mein cell array größer ist d.h nicht mehr 1x1 sondern 1x35 und die Spalten dann jeweils unterschiedlich also 1x19 1x15 1x11.
Ich möchte jeweils immer für eine Spalte also für ein 1x19 oder 1x15 jeweils bei der 3 anfangen und in dreier Schritten addiereren und bei der 5 anfangen und auch in dreier Schritten addieren und das jeweils für das ganze cell array.Vielleicht wirds an meinem Code verständlich was ich vorhab.Bloß bei den Spalten konvertieren weis ich nicht wie ich des umsetzen soll.
also wie oben schon steht hab ich zuerst versucht für ein 1x1 cell array mit 1x19 Spalteninhalt jeweils die 3,7,11 zu addieren.Dabei haben mir denny und yvonne mit ihren codes geholfen und es hat auch super geklappt.
Jetzt hab ich ein 1x35 cell array mit mehren Spalten zb 1x19,1x15 oder 1x11.
Mein Problem:Ich will jetzt immer von der 3 Spalte aus anfangen mit 4 Schritten und dann diese addieren also zb Spalte 3,7,11 addieren und gleichzeitig von der 4 Spalte anfangen mit vierer Schritten addieren also zb 5,9,13.Beide Ergebnisse müssen dann seperat vorliegen.
Das muss ich jetzt für jedes cell array machen also für 1x19,1x15 un 1x11 usw.
Ich hoffe ich habs einigermaßen verständlich ausgedrückt.Wäre echt super wenn mir jemand weiterhelfen könnte Mein Code(erweiterter) sieht so aus
% ertsmal die Daten extrahieren
rawdata = rawdata{i};
rawdata = {cat(2, rawdata{:})};
% Komma durch Punkt ersetzen
rawdata = regexprep(rawdata, ',', '.') ;
[B,K]=size(rawdata{i});
% jetzt die Spalten konvertieren:
M = str2double(rawdata(:, [3:4:end]));
N = str2double(rawdata(:, [5:4:end]));
% jetzt kannst du diese Spalten beliebig addieren
F=sum(M,2) ;
G=sum(N,2);
H=[F,G];
richtig wäre:
du hast in Zelle 5, nicht CSV eingelesen sondern M-File, deswegen habe ich noch zusätzlich eine Überprüfungsroutine dazwischen geschaltet.
Wo ich prüfe, ob die Anzahl der spalten überall gleich ist.
% ertsmal die Daten extrahieren
rawdatatmp = rawdata{i};
equal_size = unique(cellfun(@length, rawdatatmp));
iflength(equal_size)== 1
rawdatatmp = cat(2, rawdatatmp{:});
% Komma durch Punkt ersetzen
rawdatatmp = regexprep(rawdatatmp, ',', '.') ;
% [B, K]=size(rawdatatmp{i});
% jetzt die Spalten konvertieren:
M = str2double(rawdatatmp(:, 3:4:end));
N = str2double(rawdatatmp(:, 5:4:end));
% jetzt kannst du diese Spalten beliebig addieren
F = sum(M,2) ;
G = sum(N,2);
H = [F,G] else fprintf('in cell %d: Anzahl der Spalten ist nicht konsistent', i);
end
Hallo denny,
erstmal vielen Dank für deine Antwort klappt super.
Aber noch eine Frage.
Kann es sein das bei deinem Code nur die Spalten von dem letzten Cell-Array 1x11 addiert werden? Ich hatte eigentlich vor von jedem cell array nach dem Schema also von der dritten Spalte aus in vierer Schritten und von der fünften Spalte aus mit vierer Schritten die Spalten zu addieren.Wäre echt super wenn ich des auch noch irgendwie machen kann.Wie könnte ich des realisieren?
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
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.