Как создать матрицу nxn с определенным значением записи - PullRequest
0 голосов
/ 29 октября 2019

Как создать матрицу nxn, в которой значение в ячейке (i, j) определяется как 1/(i+j-1).

Ответы [ 3 ]

0 голосов
/ 29 октября 2019

Вы можете использовать outer для создания такого вида матрицы, т.е. M <- 1/(outer(1:n,1:n,"+")-1)

0 голосов
/ 29 октября 2019

Решение с использованием функций .row и .col. (работает для R 3.5.0 или более поздней версии)

n <- 3L

i <- .row(c(n, n))
i
#>      [,1] [,2] [,3]
#> [1,]    1    1    1
#> [2,]    2    2    2
#> [3,]    3    3    3


j <- .col(c(n, n))
j
#>      [,1] [,2] [,3]
#> [1,]    1    2    3
#> [2,]    1    2    3
#> [3,]    1    2    3


m <- 1/(i + j - 1)
m
#>           [,1]      [,2]      [,3]
#> [1,] 1.0000000 0.5000000 0.3333333
#> [2,] 0.5000000 0.3333333 0.2500000
#> [3,] 0.3333333 0.2500000 0.2000000 

Для более ранних версий R:

n <- 3L

i <- row(diag(n))
j <- col(diag(n))

m <- 1/(i + j - 1)
0 голосов
/ 29 октября 2019

Это грубое решение:

create_matrix <- function(n){
 m <- matrix(NA, n, n)
 for (i in 1:n){
   for (j in 1:n){
     m[i,j] <- 1/(i+j-1)
   }
 }
 m
}

create_matrix(2)

   [,1]      [,2]
[1,]  1.0 0.5000000
[2,]  0.5 0.3333333

Вы также можете использовать тот факт, что полученная матрица симметрична (но я не думаю, что это быстрее):

create_matrix_sym <- function(n){
 m <- matrix(NA, n, n)
 for (i in 1:n){
   for (j in 1:i){
     m[i,j] <- 1/(i+j-1)
   }
 }
 m[upper.tri(m)] <- m[lower.tri(m)]
 m
}
...