【问题标题】:summation of numbers in a vector without loop in matlabmatlab中没有循环的向量中的数字总和
【发布时间】:2017-05-15 23:23:21
【问题描述】:

我有一个长度为L 的向量。我想在 MATLAB 中对每个 N 数字求和,而无需循环,以节省我的模拟时间。

例如,如果L=10N=2 为矩阵

A=[1,1,3,3,0,2,4,4,6,2]

矩阵B应该是

B=[2,6,2,8,8]

在哪里

B(1)=A(1)+A(2)=2
B(2)=A(3)+A(4)=6

【问题讨论】:

  • 将初始向量重新整形为NxL/N 向量,然后按列求和,然后重新整形

标签: matlab performance loops sum


【解决方案1】:

您可能还在考虑使用 movsum。

C = movsum(A,2);
B = C(2:2:end);

我将其性能评估为B = sum(reshape(A, 2, [])); movsum 大约需要 2 倍的重塑时间。但它提供了一些灵活性,并且适用于非偶数长度向量。

【讨论】:

  • 似乎movsum在matlab 2014中不起作用,我应该在2016年尝试一下。
【解决方案2】:
B = sum(reshape(A, 2, []));

如果A的长度可以是奇数:

n = floor(numel(A)/2) * 2;
B = sum(reshape(A(1:n), 2, []));

【讨论】:

    猜你喜欢
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 2013-06-09
    • 2016-08-16
    相关资源
    最近更新 更多