我如何将矩阵的第i列中的所有元素提高到i的幂?

问题描述 投票:0回答:1

我目前正在尝试根据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的幂(不使用循环)。怎么做?

r matrix matrix-multiplication
1个回答
0
投票

一种选择是遍历列的序列,提取矩阵列并将其提高到索引的幂

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 <- matrix(1:25, 5, 5)
© www.soinside.com 2019 - 2024. All rights reserved.