Выполняйте математические операции над последовательными строками матрицы - PullRequest
0 голосов
/ 07 мая 2018

У меня большая матрица (1000 * 11). Я хочу вычислить сумму столбцов между последовательными строками (первая строка и вторая строка, третья строка и четвертая строка и т. Д.). Например,

      [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16

Я хочу преобразовать вышеуказанную матрицу в следующую.

        [,1] [,2] [,3] [,4]
[1,]     3    11    19    27
[2,]     7    15    23    31

Один из способов сделать это - разбить большую матрицу на подматрицы, выполнить вычисления и объединить результаты. Есть ли лучшее решение, чем это?

1 Ответ

0 голосов
/ 07 мая 2018

Мы можем просто установить подмножество строк matrix, используя логический индекс повторного использования, и сделать +

mat[c(TRUE, FALSE),]  + mat[c(FALSE, TRUE),]

Или с rowsum

rowsum(mat, group = rep(1:2, each = 2))

Если строк больше, программно создайте «группу»

rowsum(mat, group = as.integer(gl(nrow(mat),2, nrow(mat))))

Или это также можно сделать с помощью aggregate

aggregate(mat, by = list(rep(1:2, each = 2)), FUN = sum)[-1]

данные

mat <- matrix(1:16, 4, 4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...