cumprod
累积乘积
说明
示例
向量的累计乘积
计算从 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
值的向量
创建一个包含 NaN
值的向量,并计算累积乘积。默认情况下,cumprod
包括 NaN
值。如果您在计算中包括 NaN
值,则只要在 A
中遇到第一个 NaN
值,累积乘积将立即变成 NaN
。
A = [1 3 NaN 2 4 NaN]; B = cumprod(A)
B = 1×6
1 3 NaN NaN NaN NaN
可以使用 'omitnan'
选项在累积乘积计算中忽略 NaN
值。
B = cumprod(A,'omitnan')
B = 1×6
1 3 3 6 24 24
输入参数
A
— 输入数组
向量 | 矩阵 | 多维数组
输入数组,指定为向量、矩阵或多维数组。
数据类型: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
复数支持: 是
dim
— 沿其运算的维度
正整数标量
沿其运算的维度,指定为正整数标量。如果不指定维度,则默认为第一个大于 1 的数组维度。
以一个二维输入数组 A
为例。
cumprod(A,1)
使用A
列中的累积元素,并返回每列的累积乘积。cumprod(A,2)
使用A
行中的累积元素,并返回每行的累积乘积。
如果 dim
大于 ndims(A)
,则 cumprod
返回 A
。
direction
— 累积方向
'forward'
(默认) | 'reverse'
累积方向,指定为 'forward'
(默认值)或 'reverse'
。
'forward'
从活动维度的1
到end
运算。'reverse'
从活动维度的end
到1
运算。
nanflag
— NaN
条件
'includenan'
(默认) | 'omitnan'
NaN
条件,指定为下列值之一:
'includenan'
- 计算每个积时包括来自输入的NaN
值,在输出中得到NaN
值。'omitnan'
- 忽略输入中的NaN
值。包含NaN
值的元素的乘积是所有非NaN
元素的乘积。如果所有元素均为NaN
,则cumprod
返回 1。
输出参数
B
— 累计乘积数组
向量 | 矩阵 | 多维数组
累计乘积数组,以向量、矩阵或大小与输入数组 A
相同的多维数组的形式返回。
B
的类与 A
的类相同,但 A
为 logical
除外(这种情况下 B
为 double
)。
详细信息
第一个非单一维度
第一个非单一维度是其大小不等于 1
的数组的第一维度。
例如:
如果
X
为 1×n 的行向量,则第二个维度是X
的第一个非单一维度。如果
X
为 1×0×n 的空数组,则第二个维度是X
的第一个非单一维度。如果
X
为 1×1×3 的数组,则第三个维度是X
的第一个非单一维度。
提示
MATLAB® 中的许多累积函数都支持
'reverse'
选项。此选项可快速执行定向计算,而无需翻转或反射输入数组。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
不支持逻辑输入。首先将输入转换为
double
。代码生成不支持对此函数使用稀疏矩阵输入。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
不支持逻辑输入。首先将输入转换为
double
。代码生成不支持对此函数使用稀疏矩阵输入。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅Run MATLAB Functions in Thread-Based Environment。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
不支持
nanflag
参数。未定义
comprod
操作中的乘积顺序。因此,对gpuArray
执行cumprod
操作的返回值可能与对相应的 MATLAB 数值数组执行cumprod
操作的返回值不完全相同。当A
是有符号整数类型时,差异可能很明显。
有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
用法说明和限制:
未定义
comprod
操作中的乘积顺序。因此,对分布式数组执行cumprod
运算和对相应 MATLAB 数值数组执行cumprod
运算所返回的答案可能不完全相同。当A
是有符号整数类型时,差异可能很明显。
有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
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)