Преобразовать вектор столбца в расширенную диагональную матрицу - PullRequest
4 голосов
/ 01 октября 2019

Рассмотрим следующий вектор столбца:

vec <- rbind(c(0.5),c(0.6))

Я хочу преобразовать его в следующую диагональную матрицу 4x4:

0.5   0   0    0 
  0 0.6   0    0 
  0   0 0.5    0
  0   0   0  0.6

Я знаю, что могу сделать это с помощью следующего кода:

dia <- diag(c(vec,vec))

Но что, если я захочу преобразовать его в диагональную матрицу 1000x1000? Тогда приведенный выше код настолько эффективен. Может быть, я могу использовать rep, но я не совсем уверен, как это сделать. Как я могу сделать это более эффективно?

Ответы [ 2 ]

2 голосов
/ 01 октября 2019

Вот еще один способ утилизации:

diag(c(vec), length(vec)*2)
1 голос
/ 01 октября 2019

Я думаю, что ваш подход уже достаточно хорош, вот другой способ, инициализируя матрицу и используя rep для заполнения диагоналей.

n <- 4
mat <- matrix(0, ncol = n, nrow = n)
diag(mat) <- rep(vec, n/2)

mat
#     [,1] [,2] [,3] [,4]
#[1,]  0.5  0.0  0.0  0.0
#[2,]  0.0  0.6  0.0  0.0
#[3,]  0.0  0.0  0.5  0.0
#[4,]  0.0  0.0  0.0  0.6

и следуя вашему подходу, вы можете сделать

diag(rep(vec, n/2))
...