Skip to content

a trick ??

4 messages · Olivier MARTIN, Jonathan Rougier, vito muggeo +1 more

#
Dear R users,

Suppose i have an A square matrix rxr. I want to obtain a block matrix
B (pxr,pxr) where
the p diagonal blocks are A and  the others values are 0.
I would like to do something like : diag(A,ncol=pr, nrow=pr)
How can i do it ??
Thanks in advance,
Olivier.

--
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Olivier MARTIN
PhD student                  phone: (33) 04 76 61 53 55
Projet IS2                               06 08 67 93 42
INRIA Rhone-Alpes            fax  : (33) 04 76 61 54 77
655, Av. de l'Europe
Montbonnot                   e-mail:olivier.martin at inrialpes.fr
38334 Saint Ismier cedex
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-


-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://stat.ethz.ch/pipermail/r-help/attachments/20020226/a40c68e1/attachment.html
#
Olivier Martin wrote:
I think you want "kronecker", eg
[,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    3    0    0    0    0
[2,]    2    4    0    0    0    0
[3,]    0    0    1    3    0    0
[4,]    0    0    2    4    0    0
[5,]    0    0    0    0    1    3
[6,]    0    0    0    0    2    4
[,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    3    0    0    0    0
[2,]    2    4    0    0    0    0
[3,]    0    0    1    3    0    0
[4,]    0    0    2    4    0    0
[5,]    0    0    0    0    1    3
[6,]    0    0    0    0    2    4

Cheers, Jonathan.
#
diag(rep(diag(A),p))

,of course.

(If I understand what you mean)
cheers,
vito


----- Original Message -----
From: Olivier Martin
To: r-news
Sent: Tuesday, February 26, 2002 1:09 PM
Subject: [R] a trick ??


Dear R users,
Suppose i have an A square matrix rxr. I want to obtain a block matrix  B
(pxr,pxr) where
the p diagonal blocks are A and  the others values are 0.
I would like to do something like : diag(A,ncol=pr, nrow=pr)
How can i do it ??
Thanks in advance,
Olivier.
--
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Olivier MARTIN
PhD student                  phone: (33) 04 76 61 53 55
Projet IS2                               06 08 67 93 42
INRIA Rhone-Alpes            fax  : (33) 04 76 61 54 77
655, Av. de l'Europe
Montbonnot                   e-mail:olivier.martin at inrialpes.fr
38334 Saint Ismier cedex
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
#
A more general solution (given a list of matrices [with any
dimensions] blockdiag(a1,a2,a3) gives the block diagonal concatenation of
the matrices).  I don't know if "kronecker" can do this or not.


blockdiag <- function(...) {
  args <- list(...)
  nr <- sapply(args,nrow)
  nc <- sapply(args,ncol)
  cumnc <- cumsum(nc)
  NR <- sum(nr)
  NC <- sum(nc)
  rowfun <- function(m,zbefore,zafter) {
    cbind(matrix(0,ncol=zbefore,nrow=nrow(m)),m,
          matrix(0,ncol=zafter,nrow=nrow(m)))
  }
  ret <- rowfun(args[[1]],0,NC-ncol(args[[1]]))
  for (i in 2:length(args)) {
    ret <- rbind(ret,rowfun(args[[i]],cumnc[i-1],NC-cumnc[i]))
  }
  ret
}
On Tue, 26 Feb 2002, Olivier Martin wrote: