2015-01-16 63 views
0

我有一个1000x500矩阵(1000行,每个对应1分钟计数,500列对应不同的高度)。我想计算10分钟的平均值(使用nanmean),这意味着我希望我的最终矩阵为100x500。是否有捷径可寻 ? 感谢您的帮助。在Matlab中将1000x500矩阵重塑为100x500

回答

1

重塑成10行矩阵,沿着每列适用nanmean,重塑回500列的矩阵。让M表示你的矩阵:

result = reshape(nanmean(reshape(M, 10, [])), [], size(M,2)); 
+0

非常感谢您的善意帮助。 – user3876557

0

如果我正确你想要什么了解,你可以这样做:

% assuming data is your 1000x500 matrix 
avgs = zeros(100, 500); 
inds = 1:10; 
for i = 0:99 
    avgs(i + 1, :) = nanmean(data(i * 10 + inds, :)) 
end 
+0

@knedlsepp yeap,谢谢你的提示! – VHarisop

+0

感谢您的帮助.. – user3876557

0

你也可以拆分成矩阵的一百10-by-500基质细胞; nanmean他们沿着列,然后再把它们放在矩阵中:

avgs = cell2mat(cellfun(@(X) nanmean(X,1), mat2cell(data,10*ones(100,1),[500]), 'uni', 0)); 
+0

Luis的回答完成了这个任务,不需要细胞,也不需要臭名昭着的'cellfun'。 –

+0

@BenVoigt:确实;但有几种选择可供选择,这并没有什么坏处。 (实际上Luis在写我的初始解决方案时发布了他的解决方案:'avgs = squeeze(nanmean(重塑(data。',500,10,[]),2))。';',这当然使我由于多余的转换重新考虑答案) – knedlsepp