R 如何将矩阵第I列中的所有元素提升为I的幂?

R 如何将矩阵第I列中的所有元素提升为I的幂?,r,matrix,matrix-multiplication,R,Matrix,Matrix Multiplication,我目前正试图根据m个时间段的n个利率选择创建一个累积因子的nxm矩阵。例如,第一行给出了一个单位以r1的利率累积的演化,第二行给出了以r2的利率累积的演化,依此类推。这应该给我一个矩阵,看起来像 1+r1 (1+r1)^2 (1+r1)^3 ... 1+r2 (1+r2)^2 (1+r2)^3 ... 1+r3 (1+r3)^2 (1+r3)^3 ... . . . 为此,我创建了一个表单矩阵 1+r1 1+r1 1+r1

我目前正试图根据m个时间段的n个利率选择创建一个累积因子的nxm矩阵。例如,第一行给出了一个单位以r1的利率累积的演化,第二行给出了以r2的利率累积的演化,依此类推。这应该给我一个矩阵,看起来像

1+r1    (1+r1)^2    (1+r1)^3    ...
1+r2    (1+r2)^2    (1+r2)^3    ...
1+r3    (1+r3)^2    (1+r3)^3    ...
 .
 .
 .
为此,我创建了一个表单矩阵

1+r1    1+r1    1+r1    ...
1+r2    1+r2    1+r2    ...
1+r3    1+r3    1+r3    ...
 .
 .
 .

(行数不变)并希望将第i行中的每个元素提高到i的幂次方(不使用循环)。如何做到这一点?

一个选项是循环列序列,提取矩阵列并将其提升到索引的幂次

sapply(seq_len(ncol(m1)), function(i) (1 + m1[,i])^i)
#      [,1] [,2] [,3]   [,4]     [,5]
#[1,]    2   49 1728  83521  5153632
#[2,]    3   64 2197 104976  6436343
#[3,]    4   81 2744 130321  7962624
#[4,]    5  100 3375 160000  9765625
#[5,]    6  121 4096 194481 11881376

或者不使用循环,使用
col
索引,该索引将返回与原始矩阵相同的维度,然后对相同维度矩阵进行幂运算

(m1 + 1)^col(m1)
#    [,1] [,2] [,3]   [,4]     [,5]
#[1,]    2   49 1728  83521  5153632
#[2,]    3   64 2197 104976  6436343
#[3,]    4   81 2744 130321  7962624
#[4,]    5  100 3375 160000  9765625
#[5,]    6  121 4096 194481 11881376
或者另一个选项是
rep

(m1 + 1)^(rep(seq_len(ncol(m1)), each = nrow(m1)))
数据
m1一个选项是循环列序列,提取矩阵列并将其提升到索引的幂次方

sapply(seq_len(ncol(m1)), function(i) (1 + m1[,i])^i)
#      [,1] [,2] [,3]   [,4]     [,5]
#[1,]    2   49 1728  83521  5153632
#[2,]    3   64 2197 104976  6436343
#[3,]    4   81 2744 130321  7962624
#[4,]    5  100 3375 160000  9765625
#[5,]    6  121 4096 194481 11881376

或者不使用循环,使用
col
索引,该索引将返回与原始矩阵相同的维度,然后对相同维度矩阵进行幂运算

(m1 + 1)^col(m1)
#    [,1] [,2] [,3]   [,4]     [,5]
#[1,]    2   49 1728  83521  5153632
#[2,]    3   64 2197 104976  6436343
#[3,]    4   81 2744 130321  7962624
#[4,]    5  100 3375 160000  9765625
#[5,]    6  121 4096 194481 11881376
或者另一个选项是
rep

(m1 + 1)^(rep(seq_len(ncol(m1)), each = nrow(m1)))
数据
m1第二个选项会更快吗?我想避免循环的原因完全是因为速度太慢了。@JohnSmith这取决于,如果你有一个非常大的矩阵,那么做循环可能会更好,因为无循环的解决方案必须从
列加载另一个大矩阵,第二个选项会更快吗?我想避免循环的原因完全是因为速度太慢。@JohnSmith这取决于,即如果你有一个非常大的矩阵,那么做循环可能会更好,因为无循环的解决方案必须从
列加载另一个大矩阵