Länge eines 3D-cell-Arrays (?) in einem struct bestimmen
kamel2626
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 17.09.2013, 12:03
Titel: Länge eines 3D-cell-Arrays (?) in einem struct bestimmen
(MATLAB)
Hallo zusammen,
im Anhang findet ihr ein Matlab-file, das einen 1x1-struct enthält. Dieser struct enthält wiederum cell-Arrays (?, hier bin ich mir nicht sicher, ob es ein anderes array, ... ist) d00 bis d15. Jedes dieser arrays ist dreidimensional.
Die ersten beiden Dimensionen sind immer 3x4. Die dritte Dimension ist von d** zu d** verschieden.
In einer for-Schleife möchte ich jeweils alle Elemente der dritten Dimension aufrufen. Dazu muss ich für jedes d** die Länge bestimmen.
Kann mir jemand sagen, wie man das umsetzen kann? Ich würde mich sehr freuen!
Ich habe bereits im Internet in verschiedenen Foren recherchiert und bin nicht fündig geworden.
liefer bitte nur die daten die man braucht und nicht irgendein ans ( das lässt sowieso darauf schließen das die daten nicht ordentlich gespeichert vorliegen) ^^ es währe einfacher gewesen cells zu benuten als weitere dynamisch angelegte structs. dann hätte man den verwendeten index auch als index benutzen können. jetzt must du umständlich wie du die daten angelegt hast auch umständlich wieder auslesen.
Verfasst am: 17.09.2013, 13:38
Titel: Re: Länge eines 3D-cell-Arrays (?) in einem struct bestimme
Hallo kamel2626,
Bitte poste eine Frage nicht in mehreren Foren gleichzeitig. Bei einem solchen "Cross-Posting" verschwenden die Leser beider Foren und die Antwortenden Zeit, wenn sie eine Antwort schreiben, die bereits an anderer Stelle gepostet worden ist. Und die Zeit der Antwortenden zu verplempern ist ein absolutes DON'T in einem Forum.
Zitat:
Dieser struct enthält wiederum cell-Arrays (?, hier bin ich mir nicht sicher, ob es ein anderes array, ... ist) d00 bis d15.
Mit dem CLASS Befehl kannst Du sehr leicht herausfinden, welchen Typ die Variablen haben. Solche leicht zu erledigenden Aufgaben sollte man besser selbst erledigen, als die Leser raten zu lassen.
Bitte poste den relevanmten Matlab Code, der die Daten erzeugt. Das ist viel besser als ein File zu verlinken. Ich selbst habe z.B. kein Matlab zur Verfügung und es ist darum umständlich an den Inhalt der Daten zu gelangen.
Gruß, Jan
kamel2626
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 17.09.2013, 21:03
Titel:
Hallo Winkow und Jan S,
danke für eure Antworten. Sorry, habe es bisher nicht geschafft, den Stuct allein (z.B. als Variable) zu speichern. Den
Befehl kannte ich noch nicht, ich bin Matlab-Neuling. Ich benutze zur Auswertung ein von jemand anderem geschriebes Programm, mit dem ich bereits Messungen ausgewertet habe. Weiter auszuwertende Daten sind in Matlabdateien gespeichert, auf die ich nun zur weiteren Auswertung zugreifen muss.
for i=3:length(a)
dat.(sprintf('M%02i',i-2))=load(a(i,:));
end
fields=fieldnames(dat);
s=0;
for i=0:u
dista=i;
fol.(sprintf('d%02i',dista))=0;
M.(sprintf('d%02i',dista))=zeros(3,4);
end for i=1:length(fields)
fields2=fieldnames(dat.(fields{i,:}));
for k=1:length(fields2)
s=s+1;
if ~strcmp(fields2{k,:},'refnr')
nr=str2double(strrep(fields2{k,:},'Particle',''));
partipos=dat.(fields{i,:}).(fields2{k,:}).Info.(sprintf('k%02i',nr));
refpos=dat.(fields{i,:}).(fields2{k,:}).Info.(sprintf('k%02i',dat.(fields{i,:}).refnr));
refmatrix=[];
for j=1:2
vector=dat.(fields{i,:}).(sprintf('Particle%02i',dat.(fields{i,:}).refnr)).MatrixM01(:,j);
[vector angle]=matrixtrafo(vector,refpos',partipos');
refmatrix=[refmatrix,vector];
end
if dista>u
continue end
fol.(sprintf('d%02i',dista))=fol.(sprintf('d%02i',dista))+1;
M.(sprintf('d%02i',dista))(:,:,fol.(sprintf('d%02i',dista))+1)...
=dat.(fields{i,:}).(fields2{k,:}).MatrixM01;
Die Indices in den Feld-Namen machen das Programm gruselig unübersichtlich. Davon kann ich immer nur heftig abraten. Ein Cell-Array wäre viel einfacher, da man dann direkt einen Index als Index verwnden kann.
Du möchtest nicht die Längen der Namen der Felder bestimmen, sondern die enthaltenen Werte. Also: STRUCT2CELL statt FIELDNAMES:
Die Indices in den Feld-Namen machen das Programm gruselig unübersichtlich. Davon kann ich immer nur heftig abraten. Ein Cell-Array wäre viel einfacher, da man dann direkt einen Index als Index verwnden kann.
Du möchtest nicht die Längen der Namen der Felder bestimmen, sondern die enthaltenen Werte. Also: STRUCT2CELL statt FIELDNAMES:
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.