Как я могу поднять все элементы в i-м столбце матрицы до степени i? - PullRequest
1 голос
/ 17 января 2020

В настоящее время я пытаюсь создать матрицу коэффициентов накопления nxm на основе выбора из n процентных ставок из m периодов времени. Так, например, первая строка дает мне эволюцию одной единицы, накапливающейся с процентной ставкой 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 (без использования al oop). Как это можно сделать?

1 Ответ

0 голосов
/ 17 января 2020

Один из вариантов - l oop по последовательности столбцов, извлечь столбец матрицы и повысить его до степени индекса

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

или без использования al oop, использовать индекс 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)
...