如何在matlab中快速bin数据

时间:2012-11-16 16:52:17

标签: matlab

我有成千上万的行。我想要的是每10行,我想取其平均值或bin。我可以实现这个运行for循环,但这将需要很长时间。有更直接的方式吗?

3 个答案:

答案 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个元素。