我有数十万行。我想要的是每 10 行,我想取它的平均值或装箱。我可以运行一个 for 循环来实现这个,但这需要很长时间。有没有更直接的方法?
问问题
5891 次
3 回答
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))
于 2012-11-16T17:13:43.110 回答
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 行。
于 2012-11-16T18:01:55.560 回答
1
使用y=smooth(x,10)
ory=filter(ones(1,10), 1, x)
然后使用y(1:10:end)
来选择每 10 个元素。
于 2012-11-16T18:10:35.777 回答