How to use the fields in the structure?
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Praveen Kumar Pakkirisamy
am 28 Feb. 2019
Kommentiert: Praveen Kumar Pakkirisamy
am 28 Feb. 2019
My structure has 83 Fields, and each field has 1059 *3 Double. Firstly how do I access these fields from the structure and then how do I multiply a matrix(rotation matrix) on these fields?. I know that I have to use for loop to access all the values and I have found this code But I do not know how It does function.
for i = fieldnames(markerStruct)'
newMarkerStruct.(i{1}) = markerStruct.(i{1});
end
I understand that values from markerStruct gets copied to newmarkerStruct. But I don't understand what i{1} means and How the value is getting assigned.
0 Kommentare
Akzeptierte Antwort
Adam Danz
am 28 Feb. 2019
Bearbeitet: Adam Danz
am 28 Feb. 2019
I've responded to your quesitons below. First I make some fake data to work with.
% Fake data
S.f1 = rand(1059, 3);
S.f2 = rand(1059, 3);
S.f3 = rand(1059, 3);
"Firstly how do I access these fields from the structure?"
% Field f1 is accessed like this
S.f1
% or dynamically
fn = fieldnames(S); %list of field names
S.(fn{1})
% add a field
S.f4 = rand(1059, 3);
"How do I multiply a matrix(rotation matrix) on these fields?"
% rotation matrix
ry = [ cos(pi) 0 sin(pi);
0 1 0 ;
-sin(pi) 0 cos(pi)] ;
% Multiply the matrix by the first field .
f1Rot = S.f1 * ry;
"I know that I have to use for loop to access all the values "
% Actually, not true. You can use structfun() to apply a function to all fields.
% In this example, it's expected that all fields have 3 columns of data.
S2 = structfun(@(x) x * ry, S, 'UniformOutput', false);
% But if you must use a loop
fn = fieldnames(S); %list of field names
S2 = struct; % create new structure (no fields yet)
for i = 1:length(fn)
S2.(fn{i}) = S.(fn{i}) * ry; %store results in a new struct with same field names
end
"I have found this code But I do not know how It does function"
% This for-loop does nothing. It's just looping through each field and re-assigning the identical value.
% It's like A = A.
for i = fieldnames(markerStruct)'
newMarkerStruct.(i{1}) = markerStruct.(i{1});
end
fieldnames() lists all field names in a cell array of strings.
6 Kommentare
Adam Danz
am 28 Feb. 2019
Bearbeitet: Adam Danz
am 28 Feb. 2019
Yeah, to be honest, this is my first time seeing it.
If you're going to use a loop (rather than structfun, which I showed in my examples), then this is the better approach:
fn = fieldnames(S); %list of field names
for i = 1:length(fn)
S.(fn{i}) * ry
end
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!