CAMARDA Carlo Giovanni
2014-Jun-24 12:38 UTC
[R] matrix built by diagonal matrices with a given structure
? stato filtrato un testo allegato il cui set di caratteri non era indicato... Nome: non disponibile URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20140624/c3a7f86d/attachment.pl>
Carlo Giovanni Camarda
2014-Jul-09 10:14 UTC
matrix built by diagonal matrices with a given structure (2nd trial)
Dear R-users, three weeks ago I sent the mail below, but I didn't receive any response. Maybe it was overlooked. Thanks anyway for all the help you gave us by this mailing-list, Giancarlo Camarda [...] I have a matrix with a series of "not-overlapping in a row dimension" vectors in a given structure. Something like: |a1, 0, 0, 0| | 0, a2, a3, 0| |a4, 0, 0, a5| where "ai" are column-vectors of the equal length, m. My aim is to construct a new matrix formed by diagonal matrices built by the mentioned vectors and placed following the original structure. Something like: |diag(a1), 0, 0, 0| | 0, diag(a2), diag(a3), 0| |diag(a4), 0, 0, diag(a5)| Of course the zeros are vectors of length m, and empty (m times m) matrices in the first and second scheme, respectively. I found a way to obtain what I need by selecting an augmented version of the original matrix which I have constructed using the kronecker product. I was wondering whether there is a more elegant and straightforward procedure. See below a simple reproducible example of my challenge in which the length of the vectors is 4. Thanks in advance for your help, Giancarlo Camarda ## size of the diagonal matrices ## or length of the vectors m <- 4 ## the original matrix ze <- rep(0,m) A <- cbind(c(1,2,3,4,ze,13,14,15,16), c(ze,5,6,7,8,ze), c(ze,9,10,11,12,ze), c(ze,ze,17,18,19,20)) ## augmenting the original matrix A1 <- kronecker(A, diag(m)) ## which rows to select w1 <- seq(1, m^2, length=m) w2 <- seq(0, 2*m^2, by=m^2) w0 <- outer(w1, w2, FUN="+") w <- c(w0) ## final matrix A2 <- A1[w,] [[alternative HTML version deleted]]