Matlab中,可以使用cumsum函数表示一组数据的累积和。累积和,从数据的第一个其大小不等于 1 的数组维度开始返回累积和。关于求和函数sum的相关介绍,可以参考:《Matlab数组求和函数sum的使用教程》。
本文主要介绍cumsum函数的常见用法、语法说明,以及一些相关实例。cumsum函数的帮助文档如下:
>> help cumsum
cumsum Cumulative sum of elements.
Y = cumsum(X) computes the cumulative sum along the first non-singleton
dimension of X. Y is the same size as X.
Y = cumsum(X,DIM) cumulates along the dimension specified by DIM.
Y = cumsum(___,DIRECTION) cumulates in the direction specified by
the string DIRECTION using any of the above syntaxes:
'forward' - (default) uses the forward direction, from beginning to end.
'reverse' - uses the reverse direction, from end to beginning.
Example: If X = [0 1 2
3 4 5]
cumsum(X,1) is [0 1 2 and cumsum(X,2) is [0 1 3
3 5 7] 3 7 12]
cumsum(X,1,'reverse') is [3 5 7 and cumsum(X,2,'reverse') is [ 3 3 2
3 4 5] 12 9 5]
cumsum函数常见用法
B = cumsum(A)
B = cumsum(A,dim)
B = cumsum(___,direction)
B = cumsum(___,nanflag)
cumsum函数语法说明
B = cumsum(A) 从 A 中的第一个其大小不等于 1 的数组维度开始返回 A 的累积和。
- 如果 A 是向量,则 cumsum(A) 返回包含 A 元素累积和的向量。
- 如果 A 是矩阵,则 cumsum(A) 返回包含 A 每列的累积和的矩阵。
- 如果 A 为多维数组,则 cumsum(A) 沿第一个非单一维运算。
B = cumsum(A,dim) 返回沿维度 dim 的元素的累积和。例如,如果 A 是矩阵,则 cumsum(A,2) 返回每行的累积和。
B = cumsum(_,direction) 可选择性地使用上述任何语法指定方向。必须指定 A,也可以指定 dim。例如,cumsum(A,2,’reverse’) 通过从尾到头计算 A 的第二个维度返回其中各行的累积和。
B = cumsum(_,nanflag) 指定在上述任意语法的计算中包括还是忽略 NaN 值。cumsum(A,’includenan’) 会在计算中包括所有 NaN 值,而 cumsum(A,’omitnan’) 则忽略这些值。
cumsum函数实例
向量的累积和
计算从 1
到 5
的整数的累积和。元素 B(2)
是 A(1)
和 A(2)
的和,而 B(5)
是元素 A(1)
至 A(5)
的和。
>> A = 1:5;
>> B = cumsum(A)
B =
1 3 6 10 15
矩阵中每列的累积和
定义其元素与其线性索引对应的 3×3 矩阵。
>> A = [1 4 7; 2 5 8; 3 6 9]
A =
1 4 7
2 5 8
3 6 9
计算 A
的列的累积和。元素 B(5)
是 A(4)
和 A(5)
的和,而 B(9)
是 A(7)
、A(8)
和 A(9)
的和。
>> B = cumsum(A)
B =
1 4 7
3 9 15
6 15 24
矩阵中每行的累积和
定义其元素与其线性索引对应的 2×3 矩阵。
>> A = [1 3 5; 2 4 6]
A =
1 3 5
2 4 6
计算 A
的行的累积和。元素 B(3)
是 A(1)
和 A(3)
的和,而 B(5)
是 A(1)
、A(3)
和 A(5)
的和。
>> B = cumsum(A,2)
B =
1 4 9
2 6 12
逻辑输入的累积和
创建一个逻辑值数组。
>> A = [true false true; true true false]
A =
1 0 1
1 1 0
计算 A
的行的累积和。
>> B = cumsum(A,2)
B =
1 1 2
1 2 2
输出的类型为 double
。
>> class(B)
ans =
double
反向累积求和
创建一个包含介于 1 到 10 的随机整数的 3×3 的矩阵。
>> rng default;
>> A = randi([1,10],3)
A =
9 10 3
10 7 6
2 1 10
沿各行计算累积和。指定 'reverse'
选项在各行中从右向左运行。结果的大小与 A
相同。
>> B = cumsum(A,2,'reverse')
B =
22 13 3
23 13 6
13 11 10
包含 NaN 值的向量
创建一个包含 NaN
值的向量,并计算累积和。默认情况下,cumsum
包括 NaN
值。如果您在计算中包括 NaN
值,则只要在 A
中遇到第一个 NaN
值,累积和将立即成为 NaN
。
>> A = [3 5 NaN 9 0 NaN];
>> B = cumsum(A)
B =
3 8 NaN NaN NaN NaN
您可以使用 'omitnan'
选项在累积和计算中忽略 NaN
值。
>> B = cumsum(A,'omitnan')
错误使用 cumsum
CUMSUM 方向必须为 'forward' 或 'reverse'。
版本过低,不支持这种用法,下面给出官方答案
>> B = cumsum(A,'omitnan')
B = 1×6
3 8 8 17 17 17
原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/4699.html