我正在尝试创建一个函数来平均我的(列)向量的某个固定大小的子集。
我通过将向量重塑为规定大小的块,然后在每一行上使用均值函数来做到这一点。
例如
A = rand(10,1)
B = reshape(A,[],2)
A = mean(B,2)
但是,如果我的向量不能被我的块的大小整除,那么 reshape 将在错误时吐出。我该如何解释这一点,以至于它会丢弃我的其余原始数据?
我正在尝试创建一个函数来平均我的(列)向量的某个固定大小的子集。
我通过将向量重塑为规定大小的块,然后在每一行上使用均值函数来做到这一点。
例如
A = rand(10,1)
B = reshape(A,[],2)
A = mean(B,2)
但是,如果我的向量不能被我的块的大小整除,那么 reshape 将在错误时吐出。我该如何解释这一点,以至于它会丢弃我的其余原始数据?
你可以使用try
和catch
治疗这个。然后在该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
我最初添加A2
到A
用于调试...
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