Can someone give me a push in the right direction regarding vectorising a loop. Is it possible to vectorise any loop? If so, I have the following script:
Names = fieldnames(Data);
for i = 1:length(fieldnames(Data));
for j = 1:length(Data.(Names{i}));
index = (Data.(Names{i}){j,1}(:, 1)==211);
Data.(Names{i}){j,1} = Data.(Names{i}){j,1}(index, :);%
end
end
Where 'Data' is a (1x3) structure. Although this particular loop doesn't take long to run, it seems like a good place to start to learn how to vectorise instead of using loops.
Any advice would be much appreciated.

댓글 수: 3

Walter Roberson
Walter Roberson 2012년 1월 17일
There are loops which cannot be vectorized. (I have not examined your code to see if yours is one of them.)
Sean de Wolski
Sean de Wolski 2012년 1월 17일
I think you should describ ehow data is organized and how it's indexed. I think you might be able to simplify that which would in turn make vectorization easier.
Richard
Richard 2012년 1월 18일
The structure 'Data' has 3 fields, called 'data1', 'data2', and 'data3' which are expressed by 'Names'. The index then goes through the first column in each matrix in 'Data.(Names)' to produce a matrix where only the rows which begin with 211 are kept.
I hope this is clearer.

댓글을 달려면 로그인하십시오.

 채택된 답변

Jan
Jan 2012년 1월 18일

0 개 추천

A simplification - please test if this is faster already, although it is not vectorized:
Names = fieldnames(Data);
for i = 1:length(fieldnames(Data));
Names_i = Data.(Names{i});
for j = 1:length(Names_i);
index = Names_i{j,1}(:, 1)==211;
Names_i{j,1} = Names_i{j,1}(index, :);
end
Data.(Names{i}) = Names_i;
end
If the cells stored in the field are {N x 1} cell vectors, omitting the second index saves time: Names_i{j} instead of Names_i{j,1}.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 MATLAB에 대해 자세히 알아보기

태그

질문:

2012년 1월 17일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by