2

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

我通过将向量重塑为规定大小的块,然后在每一行上使用均值函数来做到这一点。

例如

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

但是,如果我的向量不能被我的块的大小整除,那么 reshape 将在错误时吐出。我该如何解释这一点,以至于它会丢弃我的其余原始数据?

4

2 回答 2

1

你可以使用trycatch治疗这个。然后在该catch部分中,您可以忽略或添加元素以A保留剩余块的平均值。在 Matlab 的文档中有很好的例子如何做这些事情。这是一个例子:

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

我最初添加A2A 用于调试...

于 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 回答