Как разделить каждое значение в матрице с максимальным значением соответствующего столбца - PullRequest
3 голосов
/ 27 апреля 2020

например

m <- matrix(c(1:9),3,3)

максимальные значения для каждого столбца будут ...

n <- matrix(c(3,6,9),1,3)

как я могу затем выполнить так, чтобы выходной сигнал представлял собой матрицу 3 на 3 со значениями: 0,33,0,66,1 в первом столбце (так как первый столбец делится на 3), 0,66,0,83,6 во втором столбце (так как второй столбец разделен на 6) 0,77, 0,88, 9 в третьем столбце (поскольку третий столбец делится на 9).

Ответы [ 4 ]

3 голосов
/ 27 апреля 2020

Мы можем повторить 'n' с помощью col из 'm'

m/n[col(m)]
#         [,1]      [,2]      [,3]
#[1,] 0.3333333 0.6666667 0.7777778
#[2,] 0.6666667 0.8333333 0.8888889
#[3,] 1.0000000 1.0000000 1.0000000
3 голосов
/ 27 апреля 2020

С основанием R вы можете использовать pmax, как показано ниже

> t((u<-t(m))/do.call(pmax,data.frame(u)))
          [,1]      [,2]      [,3]
[1,] 0.3333333 0.6666667 0.7777778
[2,] 0.6666667 0.8333333 0.8888889
[3,] 1.0000000 1.0000000 1.0000000
2 голосов
/ 27 апреля 2020

Вы можете использовать sweep:

sweep(m, 2, apply(m, 2, max), "/")
          [,1]      [,2]      [,3]
[1,] 0.3333333 0.6666667 0.7777778
[2,] 0.6666667 0.8333333 0.8888889
[3,] 1.0000000 1.0000000 1.0000000

или установить максимальное значение с col:

m / apply(m, 2, max)[col(m)]

или сделать умножение матриц с diag из 1 / max:

m %*% diag(1/apply(m, 2, max))

Посмотрите на: Как разделить каждую строку матрицы на элементы вектора в R

2 голосов
/ 27 апреля 2020

Использование apply:

apply(m, 2, function(x) x / max(x))

          [,1]      [,2]      [,3]
[1,] 0.3333333 0.6666667 0.7777778
[2,] 0.6666667 0.8333333 0.8888889
[3,] 1.0000000 1.0000000 1.0000000

Это то, что вы ищете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...