一概に構造体とセル配列でどちらのほうがループが速いとは言い切れず、繰り返し数nの値にも依ってきます。下記の例では各要素の値を2倍する処理ですが、n=100000で構造体のほうが速いですが、n=100とかだとセル配列のほうが速かったです。
構造体でforループ
fnames = fieldnames(strData);
strData.(fnames{n}) = strData.(fnames{n}) * 2;
セル配列でforループ
[cellData{:}] = deal(numData);
cellData{n} = cellData{n} * 2;
ただ、一つ言えるのはループ処理をまとめて処理したほうが速いです。
- ベクトル化 — ループベースのコードを記述する代わりに、MATLAB の行列およびベクトル演算の使用を検討します。詳細は、ベクトル化を参照してください。
上記の例を構造体の要素にまとめて処理するstructfun、セル配列でまとめて処理するcellfunを使ってみますと下記のようになります。
structfunで構造体をまとめて処理
strData = structfun(@(x) x*2, strData, 'UniformOutput', false);
cellfunでセル配列をまとめて処理
[cellData{:}] = deal(numData);
cellData = cellfun(@(x) x*2, cellData, 'UniformOutput', false);