How to access elements of a structure without the use of a loop ?
이전 댓글 표시
Hi everybody,
my question sounds very simple but I cant find a way to have access to elements (values) of a structure without a loop. Here below is what I have done with the help of a loop:
for i=1:length(conf.running)
event1LFS(i)=Running{i}.SP.LFS2LMS;
end
event1LFS=mean(event1LFS);
So if you have a way like the following one (but this one does not work of course), it would be perfect. Thank you
event1LFS=mean(Running{1:end}.SP.LFS2LMS);
채택된 답변
추가 답변 (2개)
James Tursa
2015년 4월 29일
편집: James Tursa
2015년 4월 29일
Try this: EDITED
temp1 = [Running{:}]; % Extract the cells, concatenate into a single struct array
temp2 = [temp1.SP]; % Extract 1st level field and concatenate
event1LFS = mean([temp2.LFS2LMS]); % Extract 2nd level field, concatenate, take mean
댓글 수: 3
Vincent
2015년 4월 29일
Stephen23
2015년 4월 29일
Sadly nested structures do not allow the extraction of all field values into a comma separated list, so the [temp.xxx.yyy] syntax does not work.
James Tursa
2015년 4월 29일
Thanks ... that means an extra step. I have edited my Answer to reflect this.
You can do this without any loops or cellfun if you rearrange the data a little bit. The following two changes would need to be made:
- use a non-scalar structure instead of a cell array holding individual scalar structures.
- do not nest structures within other structures.
After these two changes you could simply do this:
mean([Running.LFS2LMS])
which is much faster and more efficient that any playing around with cell arrays and the like. Here is a simple example showing how accessing non-scalar structure can work:
>> A(3).data = 8;
>> A(2).data = 4;
>> A(1).data = 2;
>> mean([A.data])
ans =
4.6667
And that is it: no cell arrays, no functions, no complications... just fast and simple.
댓글 수: 3
Vincent
2015년 4월 29일
Vincent
2015년 4월 29일
If Running is a non-scalar structure then the syntax
Running.SP
Running(1).SP,Running(2).SP,Running(3).SP,...
But you only assign the first one to a variable, which is basically the same as doing this:
temp = Running(1).SP
This is why I clearly state in my answer "2. do not nest structures within other structures.".
카테고리
도움말 센터 및 File Exchange에서 Structures에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!