0

Matlabは初めてです。Mlintは、パフォーマンスを向上させるために配列を事前に割り当てる必要があると言っています。次のコードスニペットで配列サイズを事前に割り当てる方法を教えてもらえますか。

for jj= init_frame: nFrames

   im1 = double(mov(jj).cdata);
   color_hist_array(jj,:) = color_histogram(im1, bins);
   [spatio_gram_array(jj,:),mu(jj,:,:),sigma(jj,:,:,:)] = spatiogram(im1, bins);

事前割り当ては、color_hist_array、spatio_gram_array、mu、およびsigmaで行う必要があります。

4

3 に答える 3

4

事前割り当ては、実際にはmatlabで非常に簡単に実行できます。この場合、コードを1行変更するだけです。

これを使用すれば完了です。

for jj=  nFrames:-1:init_frame

ループを逆方向に実行するため、すべての変数は最大サイズで開始され、スペースが一度に割り当てられます。

于 2013-02-26T16:31:18.630 に答える
3

事前割り当てとは、最初に必要なサイズの変数を作成してから、値を入力することを意味します。これは、ループの反復ごとに変数のサイズを大きくするよりもはるかに高速です。これは、大きくするには、新しいサイズの新しいメモリを割り当ててから、古いデータを新しいメモリにコピーする必要があるためです。

次に例を示します。

N = 10000;
x = zeros(1,N);
for i = 1:N
    x(i) = someFunction(i);
end

後方ループに関するDennisの答えは、ループの前に余分なコード行を追加せずに事前に割り当てるための便利なトリックです。

于 2013-02-26T16:37:08.477 に答える
1

これこのリンクを読んでください。簡単に言うと、事前割り当てとは、MATLABにマトリックスの大きさを伝えることです(そのマトリックスの使用を開始する前に)。MATLABが十分なメモリを割り当てることができるようにします。しかし、これにはさらに多くの分析があり、上記のリンクにあります。

于 2013-02-26T16:42:38.310 に答える