Matlab中,可以使用cumprod函数表示一组数据的累积乘积。累积乘积,从数组中的第一个其大小不等于 1 的数组维度开始返回累积乘积。关于乘积函数prod的相关介绍,可以参考文章:《Matlab数据处理之数组元素求积函数prod》。
本文主要介绍cumprod函数的常见用法、语法说明以及一些相关实例。cumprod函数的帮助文档如下:
>> help cumprod
cumprod Cumulative product of elements.
Y = cumprod(X) computes the cumulative product along the first non-singleton
dimension of X. Y is the same size as X.
Y = cumprod(X,DIM) cumulates along the dimension specified by DIM.
Y = cumprod(___,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]
cumprod(X,1) is [0 1 2 and cumprod(X,2) is [0 0 0
0 4 10] 3 12 60]
cumprod(X,1,'reverse') is [0 4 10 and cumprod(X,2,'reverse') is [ 0 2 2
3 4 5] 60 20 5]
cumprod函数常见用法
B = cumprod(A)
B = cumprod(A,dim)
B = cumprod(___,direction)
B = cumprod(___,nanflag)
cumprod函数语法说明
B = cumprod(A) 从 A 中的第一个其大小不等于 1 的数组维度开始返回 A 的累积乘积。
- 如果 A 是向量,cumprod(A) 返回包含 A 元素的累计乘积的向量。
- 如果 A 是矩阵,则 cumprod(A) 返回包含 A 每列的累计乘积的矩阵。
- 如果 A 为多维数组,则 cumprod(A) 沿第一个非单一维运算。
B = cumprod(A,dim) 返回沿维度 dim 的累积乘积。例如,如果 A 是矩阵,则 cumprod(A,2) 返回每行的累计乘积。
B = cumprod(_,direction) 可选择性地使用上述任何语法指定方向。必须指定 A,也可以指定 dim。例如,cumprod(A,2,’reverse’) 通过从尾到头计算 A 的第二个维度返回其中各行的累积乘积。
B = cumprod(_,nanflag) 指定在上述任意语法的计算中是包括还是忽略 NaN 值。cumprod(A,’includenan’) 会在计算中包括 NaN 值,而 cumprod(A,’omitnan’) 则忽略这些值。
cumprod函数实例
向量的累计乘积
计算从 1
到 5
的整数的累积乘积。元素 B(2)
是 A(1)
和 A(2)
的乘积,而 B(5)
是元素 A(1)
至 A(5)
的乘积。
>> A = 1:5;
>> B = cumprod(A)
B =
1 2 6 24 120
矩阵中每列的累计乘积
定义其元素与其线性索引对应的 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 = cumprod(A)
B =
1 4 7
2 20 56
6 120 504
矩阵中每行的累计乘积
定义其元素与其线性索引对应的 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 = cumprod(A,2)
B =
1 3 15
2 8 48
逻辑值输入双精度输出
创建一个逻辑值数组。
>> A = [true false true; true true false]
A =
1 0 1
1 1 0
计算 A
的行的累积乘积。
>> B = cumprod(A,2)
B =
1 0 0
1 1 0
输出的类型为 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 = cumprod(A,'reverse')
B =
180 70 180
20 7 60
2 1 10
包含 NaN 值的向量
创建一个包含 NaN
值的向量,并计算累积乘积。默认情况下,cumprod
包括 NaN
值。如果您在计算中包括 NaN
值,则只要在 A
中遇到第一个 NaN
值,累积乘积将立即变成 NaN
。
>> A = [1 3 NaN 2 4 NaN];
>> B = cumprod(A)
B =
1 3 NaN NaN NaN NaN
可以使用 'omitnan'
选项在累积乘积计算中忽略 NaN
值。
我运行上述代码后有报错,可能是因为版本问题。
>> B = cumprod(A,'omitnan')
错误使用 cumprod
CUMPROD 方向必须为 'forward' 或 'reverse'。
官方运行结果如下:
B = cumprod(A,'omitnan')
B = 1×6
1 3 3 6 24 24
原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/4899.html