2

(列) ベクトルの特定の固定サイズのサブセットを平均化する関数を作成しようとしています。

ベクトルを所定のサイズのチャンクに再形成し、各行で平均関数を使用してそれを行っています。

例えば

A = rand(10,1)
B = reshape(A,[],2)
A = mean(B,2)

ただし、ベクトルがチャンクのサイズで割り切れない場合、reshape はエラーを吐き出します。元のデータの残りを破棄するように、どうすればそれを説明できますか?

4

2 に答える 2

1

とを使用trycatchてこれを処理できます。次に、その部分で、残りのチャンクの平均を保存catchする要素を無視または追加できます。AMatlab のドキュメントには、これらのことを行う方法の良い例があります。その例を次に示します。

A=randi(10,11,1);
chunk_size=4;

try
    B = reshape(A,chunk_size,[]);
catch err
    if (strcmp(err.identifier,'MATLAB:getReshapeDims:notDivisible'))
        A2=A;
        A2(end+1:chunk_size*ceil(size(A,1)/chunk_size )) = mean( A(chunk_size*floor(size(A,1)/chunk_size )+1:end));
        B = reshape(A2,4,[]);
        C=mean(B,1);
    end

end

最初 にデバッグ用に追加A2しました...A

于 2013-09-20T06:59:50.040 に答える
0
A=rand(10,1)
chunkSize = 2

C = chunkSize *floor(size(A,1)/chunkSize )   %// Find the biggest subset that will be divisible by chunkSize 
M=mean(reshape(A(1:C), chunkSize, []))       %// Use reshape as you did but leaving off the extra end bits
M = [M, mean(A(C+1:end))]                    %// then find the mean of the extra end bits
于 2013-09-20T07:02:53.303 に答える