我对快速矩阵变换有一点问题。这种转变必须进行很多次,所以我正在寻找一种快速的方法。想象一下给定的矩阵A
和一个整数参数L
。矩阵A
应转换为包含newA
行和L
列的新矩阵nrow(A)*ncol(A)/L
。我采用L
行A
并希望将它们转换为列。这个问题的两个可能解决方案的一个小例子newA1
和newA2
其中newA1 = newA2
应该澄清我的解释:
A = matrix(1:24,6,4,byrow=T) #example matrix
L = 2 #number of rows for new matrix
newA1 = NULL
newA2 = matrix(0,L,nrow(A)*ncol(A)/L)
for(i in 1:(nrow(A)/L)){
newA1 = cbind(newA1,A[((i-1)*L+1):(i*L),]) #slower than newA2
newA2[1:L,((i-1)*ncol(A)+1):(i*ncol(A))] = A[((i-1)*L+1):(i*L),] #faster than newA1
}
矩阵看起来像这样:
> A
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
[4,] 13 14 15 16
[5,] 17 18 19 20
[6,] 21 22 23 24
> newA1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,] 1 2 3 4 9 10 11 12 17 18 19 20
[2,] 5 6 7 8 13 14 15 16 21 22 23 24
L=3
也适用于此示例。