Что
Учитывая некоторые matrix
:
mat <- matrix(1:10,ncol=2)
Я хочу преобразовать его в следующий формат триплета: (i, j, v) где i
- индекс строки, j
- индекс столбца, а v
- значение в i, j (вы можно увидеть почему внизу)
Что я пробовал:
matrixToTriplet <- function(mat) {
i <- 1:nrow(mat)
nj <- ncol(mat)
j <- 1:nj
output <- matrix(numeric(0), ncol=3)
for(i_ in i) {
curr <- c(rep(i_, times=nj),j,mat[i_,])
output <- rbind(output, matrix(curr, ncol=3))
}
output
}
Вывод должен быть:
> matrixToTriplet(mat)
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 2 6
[3,] 2 1 2
[4,] 2 2 7
[5,] 3 1 3
[6,] 3 2 8
[7,] 4 1 4
[8,] 4 2 9
[9,] 5 1 5
[10,] 5 2 10
У меня также была другая версия, использующая apply
и sapply
вместо for
, но они взорвались бы очень быстро. Размеры, над которыми я работаю, довольно большие, матрицы 1600х1600.
Почему
Кто-то может спросить «почему»? Причина этого в том, что мне нужны i
s и j
s как функции для модели, предсказывающей v
. Если есть лучший способ сделать это, мне интересно услышать.