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 ExchangeMATLAB についてさらに検索

タグ

質問済み:

2012 年 1 月 17 日

Community Treasure Hunt

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

Start Hunting!

Translated by