0

構造を初期化したいのですが、遅すぎるようです。Matlabではるかに高速なソリューションであると思われるrepmatを使用するにはどうすればよいですか? 元は:

for i=1:30
    myloc.one.matrixBig(i,1).matrixBig= zeros(6,6);
    for j=1:5
      myloc.one.id(i,j) = 0;
      for k=1:10
          myloc.one.final(j,k).final(i,1) = 0;
      end
    end
end

編集:

   for j=1:30
       for i=1:10 
          myObject{i,j}.s = zeros(6,1);
          myObject{i,j}.f = zeros(6,1);
       end
   end

また、以前に [] 初期化を追加することで高速化できますか、それとも最適化の可能性の限界ですか? 助けてくれてどうもありがとう!

4

2 に答える 2

1

以下は、最初のコード スニペットと同等のベクトル化されたコードです。

myloc.one = struct('id', zeros(30, 5), ...
  'matrixBig', struct('matrixBig', repmat({zeros(6)}, 30, 1)), ...
  'final', struct('final', repmat({zeros(30, 1)}, 5, 10)));

または代わりに:

myloc.one = struct('id', zeros(30, 5), ...
   'matrixBig', repmat(struct('matrixBig', zeros(6)), 30, 1), ...
   'final', repmat(struct('final', zeros(30, 1)), 5, 10));

一番好きなものを選んでください。

2 番目の (編集された) 部分については、次のように置き換えることができます。

myObject = repmat({struct('s', zeros(6, 1), 'f', zeros(6, 1))}, 30, 10);

ここには明示的なループがないため、何も事前に割り当てる必要がないことに注意してください。

于 2013-07-14T12:50:00.600 に答える