【问题标题】:Convert a matrix of value into a matrix of its cumulative product将值矩阵转换为其累积乘积矩阵
【发布时间】:2026-02-20 01:15:01
【问题描述】:

我正在尝试计算矩阵的累积乘积,我将在下面展示我的示例。

sample <- matrix(c(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5),6,5,byrow=T)
sample
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    1    2    3    4    5
[3,]    1    2    3    4    5
[4,]    1    2    3    4    5
[5,]    1    2    3    4    5
[6,]    1    2    3    4    5

我想计算每一列中每一行的累积乘积。所以结果应该是这样的:

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    6   24  120
[2,]    1    2    6   24  120
[3,]    1    2    6   24  120
[4,]    1    2    6   24  120
[5,]    1    2    6   24  120
[6,]    1    2    6   24  120

我已经尝试过 cumprod(sample) 并且显然它不能以这种方式很好地与矩阵一起使用,我想知道是否有任何快捷方式可以在不使用循环的情况下执行此操作。

非常感谢您的帮助!

【问题讨论】:

  • 另外,请查看此链接 r.789695.n4.nabble.com/…>

标签: r


【解决方案1】:
sample <- matrix(rep(1:5,6),ncol=5,byrow=TRUE)

(使用sample 作为变量名可能不明智,因为它也是一个内置函数的名称; 明智的是拼出TRUE 而不是使用T 快​​捷方式)

这样做:

t(apply(sample,1,cumprod))

apply(...,1,cumprod)cumprod 函数应用于每一行(“2”将其应用于列)。因为apply 排列结果的方式:

如果对“FUN”的每次调用都返回一个长度为“n”的向量,那么如果“n > 1”,“应用”将返回一个维度为“c(n, dim(X)[MARGIN])”的数组。

您必须转置 (t()) 结果。

【讨论】: