vectorization

조회 수: 17 (최근 30일)
Richard
Richard 2012년 1월 17일
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
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일
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개)

카테고리

Help CenterFile Exchange에서 MATLAB에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by