我有成千上万的行。我想要的是每10行,我想取其平均值或bin。我可以实现这个运行for循环,但这将需要很长时间。有更直接的方式吗?
答案 0 :(得分:2)
这应该有效,只要向量的长度是10的倍数:
data = rand(100,1);
result = mean(reshape(data, 10, length(data)/10),1)
如果长度不是10的倍数,您需要决定如何处理额外的元素,并为此添加一些特殊情况。
<强>更新强>
受Rody解决方案的启发,只要第一个维度是10的倍数,以下内容将适用于任意维度的矩阵:
data = rand(100,3,2);
sz = size(data);
result = squeeze(mean(reshape(data, [10 sz(1)/10 sz(2:end)]),1))
答案 1 :(得分:1)
或者:
result = arrayfun(...
@(x) mean(data(x:min(x+9,end),:),1), ...
1:10:size(data,1), 'UniformOutput', false);
result = cat(1, result{:});
这个对data
中的确切行数不太敏感。如果最后只剩下6行,则平均为6行。
答案 2 :(得分:1)
使用y=smooth(x,10)
或y=filter(ones(1,10), 1, x)
,然后使用y(1:10:end)
选择每个第10个元素。