Matlab数据处理之累积乘积函数cumprod

4.7
(3)

Matlab中,可以使用cumprod函数表示一组数据的累积乘积。累积乘积,从数组中的第一个其大小不等于 1 的数组维度开始返回累积乘积。关于乘积函数prod的相关介绍,可以参考文章:《Matlab数据处理之数组元素求积函数prod》。

Matlab数据处理之累积乘积函数cumprod

本文主要介绍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
Matlab数据处理之累积乘积函数cumprod

矩阵中每行的累计乘积

定义其元素与其线性索引对应的 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
Matlab数据处理之累积乘积函数cumprod

反向累积乘积

创建一个包含介于 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'。
Matlab数据处理之累积乘积函数cumprod

官方运行结果如下:

B = cumprod(A,'omitnan')

B = 1×6

     1     3     3     6    24    24

共计3人评分,平均4.7

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/4899.html

(0)
微信公众号
古哥的头像古哥管理团队
上一篇 2023年03月24日 23:39
下一篇 2023年03月26日 22:20

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号