当一个块不能与我的数据大小整除时,为一块数据生成平均值

时间:2013-09-20 06:50:02

标签: matlab

我正在尝试创建一个平均我(列)向量的某个固定大小子集的函数。

我是通过将我的矢量重新塑造成规定大小的块,然后在每一行使用平均函数来实现的。

例如

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

但是,如果我的矢量不能与我的块的大小整除,则重塑会在出错时吐出。我如何解释这一点,以至于它会丢弃原始数据的其余部分?

2 个答案:

答案 0 :(得分:1)

您可以使用try and catch来解决此问题。然后在catch部分,您可以忽略或添加A的元素,以保留剩余块的平均值。在Matlab的documentation中,有很好的例子说明如何做这些事情。这是一个例子:

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进行调试......

答案 1 :(得分: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