一次循环50多个元素(matlab)

时间:2017-02-04 20:35:59

标签: matlab

我目前是matlab的新手,我试图一次循环50多个元素而不是一次一个元素。例如,我有一个1000个元素的列表,我想计算每50个元素的总和。不是通过索引来执行求和函数,而是使用循环会更快。我该怎么做呢?

即。 [1,......第50个元素,第51个元素...... 100 ...] 输出将是1:50,51:100,101:150的总和值......依此类推。

提前致谢

3 个答案:

答案 0 :(得分:3)

我不太确定“通过索引编制和函数”是什么意思,但有各种方法可以做到这一点。一般来说,我试图避免在Matlab中使用显式循环,让MathWorks函数发挥其魔力。

results = zeros(20,1); 
for i = 1:20
    results(i) = sum(1 + (50 * (i - 1)):50 + 50 * (i - 1));
end

另一种选择是做arrayfun

之类的事情
sIndex = 1:50:951;
eIndex = 50:50:1000;
result = arrayfun(@(x, y) sum(x:y), sIndex, eIndex);

您也可以使用reshape和sum来一次性完成。

numbers = 1:1000;
numbers2 = reshape(numbers, 50, []);
result = sum(numbers2);

最后一种方法是我个人会说的Matlab方式。 arrayfun基本上是循环的包装器,循环是......很好的循环。

答案 1 :(得分:1)

如果您需要总和,您还可以使用movsum

array = 1:1000;
win = 50; % window size
msum = movsum(array,win,'Endpoints','discard');

以同样的方式,您可以使用:

movmax移动最大值
movmean移动平均值
movmedian移动中位数 movmin移动最小值 movstd移动标准偏差
movvar移动差异

答案 2 :(得分:1)

使用cumsumdiff,您可以获得所需的结果。

C = [0 cumsum(a)];
out = diff(C(1:50:end));