在 R 中使用约束调整矩阵大小
Resizing matrix with constraints in R
我有一个 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)
有更短的方法吗?非常感谢!
这不是那么短,但如果您想编写一个函数以供重用,它可能会有所帮助。
这里,我注意到初始的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
如果你有一个 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)
我有一个 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)
有更短的方法吗?非常感谢!
这不是那么短,但如果您想编写一个函数以供重用,它可能会有所帮助。
这里,我注意到初始的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
如果你有一个 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)