#r #for-loop #matrix
Вопрос:
Есть более быстрый способ создания матрицы, подобной приведенной ниже, которую я создал, не только для n =4, но и для n=10000. Каждая строка i
увеличивается i/i 1
m=matrix(c(0),n,n);m
m[1,1]=m[1,2]=1/2
m[2,1]=m[2,2]=m[2,3]=1/3
m[3,1]=m[3,2]=m[3,3]=m[3,4]=1/4
m
Я попробовал эту lower.tri()
функцию, но она не удерживает верхнюю линию вне диагонали
n=5
m=matrix(c(1/2,1/3,1/4,1/5,1/6),n,n);m
lower.tri(m,diag=FALSE)
m[upper.tri(m,diag=FALSE)]=0
m
MASS::fractions(m)
Ответ №1:
Следующие работы:
m = matrix(1 / (seq(n) 1), n, n)
m[row(m) 1L < col(m)] = 0
Ибо n = 4
в результате получается:
[,1] [,2] [,3] [,4]
[1,] 0.5000000 0.5000000 0.0000000 0.00
[2,] 0.3333333 0.3333333 0.3333333 0.00
[3,] 0.2500000 0.2500000 0.2500000 0.25
[4,] 0.2000000 0.2000000 0.2000000 0.20
… Из вашего описания я не уверен, намеревались ли вы, чтобы в последней строке было все 0 или все 1 / (n 1), но заполнение ее 0-мя тривиально.
Комментарии:
1. Последняя строка должна быть 1/(n 1)