我正在尝试创建一个平均我(列)向量的某个固定大小子集的函数。
我是通过将我的矢量重新塑造成规定大小的块,然后在每一行使用平均函数来实现的。
例如
A = rand(10,1)
B = reshape(A,[],2)
A = mean(B,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