Изменение размера матрицы с ограничениями в R - PullRequest
3 голосов
/ 01 ноября 2019

У меня есть матрица 5x5, которая выглядит следующим образом

A<- matrix(c(24,18,18,24,56,
         0,0,2,8,32,
         3,12,6,27,1,
         9,8,14,39,51,
         34,45,0,17,0),nrow=5,byrow=F)

Я бы хотела изменить ее размер до 2x2, который выглядит следующим образом

C <- matrix(c(sum(A[1:2,1:2]),
          sum(A[1:2,3:5]),
          sum(A[3:5,1:2]),
          sum(A[3:5,3:5])),nrow=2,byrow = T)

Есть ли более короткий способ сделатьэто? Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

Это не так уж и мало, но это может немного помочь, если вы хотите написать функцию для повторного использования.

Здесь я отмечаю, что начальная A[1:j, 1:j] является первой подматрицей, а зная j может определить оставшиеся подматрицы.

j <- 2
n <- nrow(A)
p <- ncol(A)

 matrix(c(sum(A[1:j, 1:j]), sum(A[1:j, (j+1):p]), 
         sum(A[(j+1):n, 1:j]), sum(A[(j+1):n , (j+1):p])),
         nrow = 2, byrow = TRUE)

#      [,1] [,2]
# [1,]   42  111
# [2,]  140  155
1 голос
/ 01 ноября 2019

Если у вас есть матрица m x m, которую вы хотите объединить в матрицу n x n, это сработает, хотя она не короткая:

n = 2

#assume m x m matrix
n_row <- nrow(A)
lst = list(1:floor(n_row / n), ceiling(n_row/ n): n_row)

matrix(
  apply(expand.grid(seq_len(n), seq_len(n)),
      1,
      function(i) sum(A[lst[[i[1]]], lst[[i[2]]]])
      ),
  n)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...