cumprod
累积乘积
说明
返回 B
= cumprod(A
)A
的累积乘积,该累积乘积从 A
中大小大于 1 的第一个数组维度开始计算。
如果
A
是向量,则B
是相同大小的向量,包含A
的累积乘积。如果
A
是矩阵,则B
是相同大小的矩阵,包含A
的每列的累积乘积。如果
A
是多维数组,则B
是相同大小的数组,包含沿A
中大小大于 1 的第一个数组维度计算的累积乘积。如果
A
是表或时间表,则M
是相同大小的表或时间表,包含A
中每个变量的累积乘积。 (自 R2023a 起)
B
的类与 A
的类相同,但 A
为 logical
除外(这种情况下 B
为 double
)。
可在上述任一语法的基础上指定计算方向。例如,B
= cumprod(___,direction
)cumprod(A,2,"reverse")
返回沿 A
的第二个维度按从尾到头的顺序计算的各行的累积乘积。
示例
向量的累计乘积
计算从 1
到 5
的整数的累积乘积。元素 B(2)
是 A(1)
和 A(2)
的乘积,而 B(5)
是元素 A(1)
至 A(5)
的乘积。
A = 1:5; B = cumprod(A)
B = 1×5
1 2 6 24 120
矩阵列中的累积乘积
创建一个元素与其线性索引对应的 3×3 矩阵。
A = [1 4 7; 2 5 8; 3 6 9]
A = 3×3
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 = 3×3
1 4 7
2 20 56
6 120 504
矩阵行中的累积乘积
创建元素与其线性索引对应的 2×3 矩阵。
A = [1 3 5; 2 4 6]
A = 2×3
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 = 2×3
1 3 15
2 8 48
逻辑值输入双精度输出
创建一个逻辑值数组。
A = [true false true; true true false]
A = 2x3 logical array
1 0 1
1 1 0
计算 A
的行的累积乘积。
B = cumprod(A,2)
B = 2×3
1 0 0
1 1 0
输出的类型为 double
。
class(B)
ans = 'double'
反向累积乘积
创建一个包含介于 1 到 10 的随机整数的 3×3 的矩阵。
rng default;
A = randi([1,10],3)
A = 3×3
9 10 3
10 7 6
2 1 10
沿各列计算累积乘积。指定 "reverse"
选项,以按自下而上的顺序在各列中进行计算。结果的大小与 A
相同。
B = cumprod(A,"reverse")
B = 3×3
180 70 180
20 7 60
2 1 10
不包括缺失值的累积乘积
创建一个包含 NaN
值的矩阵。
A = [3 5 NaN 4; 2 6 NaN 9; 1 3 0 NaN]
A = 3×4
3 5 NaN 4
2 6 NaN 9
1 3 0 NaN
计算矩阵的累积乘积,不包括 NaN
值。对于包含前导 NaN
值的矩阵列,在遇到非 NaN
值之前,累积乘积一直为 1。
B = cumprod(A,"omitnan")
B = 3×4
3 5 1 4
6 30 1 36
6 90 0 36
输入参数
A
— 输入数组
向量 | 矩阵 | 多维数组 | 表 | 时间表
输入数组,指定为向量、矩阵、多维数组、表或时间表。
数据类型: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| table
| timetable
复数支持: 是
dim
— 沿其运算的维度
正整数标量
沿其运算的维度,指定为正整数标量。如果不指定维度,则默认为第一个大于 1 的数组维度。
以一个二维输入数组 A
为例。
cumprod(A,1)
使用A
列中的累积元素,并返回每列的累积乘积。cumprod(A,2)
使用A
行中的累积元素,并返回每行的累积乘积。
如果 dim
大于 ndims(A)
,则 cumprod
返回 A
。
direction
— 累积方向
"forward"
(默认) | "reverse"
累积方向,指定为以下值之一:
"forward"
- 从运算维度的1
到end
运算。"reverse"
- 从运算维度的end
到1
运算。
nanflag
— 缺失值条件
"includemissing"
(默认) | "includenan"
| "omitmissing"
| "omitnan"
缺失值条件,指定为下列值之一:
"includemissing"
或"includenan"
- 在计算累积乘积时包括A
中的NaN
值。只要在A
中遇到第一个NaN
值,B
中的元素就立即成为NaN
。"includemissing"
和"includenan"
具有相同的行为。"omitmissing"
或"omitnan"
- 在计算累积乘积时忽略A
中的NaN
值。如果A
有连续前导NaN
值,则B
中对应的元素是 1。"omitmissing"
和"omitnan"
具有相同的行为。
提示
利用许多累积函数中的
"reverse"
选项可以快速执行定向计算,而不需要翻转或反射输入数组。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
不支持逻辑输入。首先将输入转换为
double
。代码生成不支持对此函数使用稀疏矩阵输入。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
不支持逻辑输入。首先将输入转换为
double
。代码生成不支持对此函数使用稀疏矩阵输入。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
不支持
nanflag
参量。未定义
cumprod
运算中的乘积顺序。因此,对gpuArray
执行cumprod
运算与对相应的数值数组执行cumprod
运算所返回的值可能不完全相同。当A
是有符号整数类型时,差异可能很明显。
有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
用法说明和限制:
未定义
cumprod
运算中的乘积顺序。因此,对分布式数组执行cumprod
运算与对相应的数值数组执行cumprod
运算所返回的值可能不完全相同。当A
是有符号整数类型时,差异可能很明显。
有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出R2023a: 指定缺失值条件
在使用 "includemissing"
或 "omitmissing"
选项计算累积乘积时,可包括或忽略输入数组中的缺失值。这些选项的行为分别与 "includenan"
和 "omitnan"
选项相同。
R2023a: 直接对表和时间表执行计算
cumprod
函数可以对表或时间表中的所有变量执行计算,而无需通过索引访问这些变量。所有变量都必须具有支持计算的数据类型。有关详细信息,请参阅Direct Calculations on Tables and Timetables。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)