2026a
# cumprod
累计乘积
# 语法
B = cumprod(A)
B = cumprod(A, dims=dim)
# 说明
B = cumprod(A, dims=dim) 返回沿维度 dim 的累积乘积。关键字参数 dims 不可省略。例如,如果 A 是矩阵,则 cumprod(A, dims=2) 返回每行的累积乘积。示例
# 示例
向量的累计乘积
计算从 1 到 5 的整数的累积乘积。元素 B[2] 是 A[1] 和 A[2] 的乘积,而 B[5] 是元素 A[1] 至 A[5] 的乘积。
A = 1:5
B = cumprod(A)
5-element Vector{Int64}:
1
2
6
24
120
矩阵中按维度累计乘积
定义其元素与其线性索引对应的 3×3 矩阵。
A = [1 4 7; 2 5 8; 3 6 9]
3×3 Matrix{Int64}:
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, dims = 1)
3×3 Matrix{Int64}:
1 4 7
2 20 56
6 120 504
计算 A 的行的累积乘积。
B = cumprod(A, dims = 2)
B = 3×3 Matrix{Int64}:
1 4 28
2 10 80
3 18 162
矩阵中每行的累计乘积
定义其元素与其线性索引对应的 2×3 矩阵。
A = [1 3 5; 2 4 6]
A = 2×3 Matrix{Int64}:
1 3 5
2 4 6
计算 A 的行的累积乘积。元素 B[3] 是 A[1] 和 A[3] 的乘积,而 B[5] 是 A[1]、A[3] 和 A[5] 的乘积。
B = cumprod(A, dims = 2)
B = 2×3 Matrix{Int64}:
1 3 15
2 8 48
乘积包含 NaN
若输入数组中含有 NaN,则从第一个NaN出现之后累计乘积计算结果为 NaN。
A = [1 3 2 4 NaN 3 NaN 2];
B = cumprod(A, dims=2)
B = 1×8 Matrix{Float64}:
1.0 3.0 6.0 24.0 NaN NaN NaN NaN
对累积乘积求反
生成一个 3x3 的随机整数矩阵,每个元素的值在 1 到 10 之间。
using TyMath
rng = MT19937ar(5489)
A = randi(rng, (1, 10), 3, 3)
3×3 Matrix{Int64}:
9 10 3
10 7 6
2 1 10
计算 A 的列的累积乘积。
B = cumprod(A, dims=1)
B = 3×3 Matrix{Int64}:
9 10 3
90 70 18
180 70 180
反转累积乘积矩阵 B。
B = reverse(B, dims=1)
B = 3×3 Matrix{Int64}:
180 70 180
90 70 18
9 10 3
# 输入参数
A - 输入数组标量 | 元组 | 向量 | 矩阵 | 多维数组
输入数组,指定为标量、元组、向量、矩阵、多维数组。
数据类型: Int | Float | Bool
复数支持: 是
dims - 沿其运算的维度正整数标量
沿其运算的维度,指定为正整数标量。当输入为矩阵或多维数组(n>2)时必须指定维度 dims。
以一个二维输入数组 A 为例:
- cumprod(A, dims = 1) 对 A 的列中的连续元素进行累积求积;
- cumprod(A, dims = 2) 对 A 的行中的连续元素进行累积求积。
如果 dim 大于 ndims(A),则 cumprod 返回 A。