[R] simple matrix calculation

Petr Savicky savicky at cs.cas.cz
Thu Mar 29 08:48:36 CEST 2012


On Wed, Mar 28, 2012 at 10:46:11PM +0200, Kehl Dániel wrote:
> Dear list-members,
> 
> I have a 9-by-9 matrix lets call it A with first row a11, a12, a13,..., 
> a19 etc.
> I also have a vector of length 3 (B).
> I want to construct a matrix of size 3x3 in the following way:
> - divide matrix A to 9 3x3 blocks
> - first is
>         a11, a12, a13
>         a21, a22, a23
>         a31, a32, a33
> - I want to get rowSums of this A1 matrix
> - Multiply A1*B and get a scalar, the first element of my new 3x3 matrix.

Hi.

Try the following, which is based on the solution by Ted Harding.

  # some input
  A <- matrix(1:81, nrow=9, ncol=9)
  B <- 7:5

  # compute the 3 x 3 matrix
  C <- diag(3)[rep(1:3, each=3), ]
  D <- cbind(rbind(B, 0, 0), rbind(0, B, 0), rbind(0, 0, B))
  R1 <- D %*% A %*% C

  # compare with another approach
  E <- A * matrix(B, nrow=9, ncol=9) # component wise product
  C <- diag(3)[rep(1:3, each=3), ]
  R2 <- t(C) %*% E %*% C

  max(abs(R1 - R2)) # [1] 0

Hope this helps.

Petr Savicky.



More information about the R-help mailing list