Дискретный разностный оператор для матрицы в R? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть матрица

A <- matrix(1:16, nrow = 4, ncol = 4, Byrow = FALSE)

Я хочу разностную разность матрицы A. То есть возьмем поэлементную разницу между первой и второй строками A, поэлементную разницу между второй и третий ряд A, et c. Поскольку A ∈ R4 × 4, результирующая матрица должна содержать построчные разности, имеющие размерность 3 × 4.

Вместо использования for-l oop для перебора строк A и получения разностей между последовательными строками я бы хотел использовать оператор дискретных разностей для ускорения операции. Я использую sapply () для построения этого оператора разности матриц B. Затем использую B × A для вычисления разности по строкам.

Допустим, матрица B ∈ R3 × 4

B <- matrix(c( -1,  1, 0,  0, 
                0, -1, 1,  0,
                0, 0, -1, 1), nrow = 3, ncol = 4, byrow = TRUE)

Ожидается выводом будет матрица C ∈ R3 × 4 со всеми 1.

Result_C <- matrix(c(  1, 1, 1,  1, 
                       1, 1, 1,  1,
                       1, 1, 1, 1), nrow = 3, ncol = 4, byrow = TRUE)

Как мне поступить? а что такое разностный оператор для матрицы в R?

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Вы можете указать полные столбцы или строки матрицы

A <- matrix(1:16, nrow = 4, ncol = 4)

A[2:(nrow(A)),]-A[1:(nrow(A)-1),]

и да, diff(A) должно сделать то же самое здесь

0 голосов
/ 26 марта 2020

Мы можем использовать diff, чтобы вычислить разницу между строками

diff(A)
#     [,1] [,2] [,3] [,4]
#[1,]    1    1    1    1
#[2,]    1    1    1    1
#[3,]    1    1    1    1
...