On Thu, Mar 29, 2012 at 03:13:25PM +0200, Petr Savicky wrote: > On Thu, Mar 29, 2012 at 01:16:49PM +0200, Kehl Dániel wrote: > > Dear David, Ted, Kjetil, Petr, > > > > thank you, you guys did a great job, I'll use your ideas in the future > > for sure. > > After I sent the question I figured a way, see below. > > > > x <- 1:81 > > b <- 1:3 > > Q <- matrix(x,9,9) > > result <- matrix(matrix(colSums(matrix(t(Q),3)),,3,TRUE) %*% b,3,3) > > Hi. > > I am not sure, what was the exact definition of the required > result matrix. The previous solutions yield a different result. > Were they correct? > > A solution equivalent to the previous ones, but formatted similarly > to the above is > > b <- 1:3 > Q <- matrix(1:81,9,9) > > tmp <- matrix(colSums(matrix(t(Q),3)),,3,TRUE) > R3 <- matrix(c(b %*% matrix(tmp, nrow=3)), nrow=3) > > # compare with a previous solution > E <- Q * matrix(b, nrow=9, ncol=9) # component wise product > C <- diag(3)[rep(1:3, each=3), ] > R2 <- t(C) %*% E %*% C > > max(abs(R2 - R3)) # [1] 0
One more approach using aperm(). b <- 1:3 Q <- matrix(1:81,9,9) A <- Q dim(A) <- c(9,3,3) A <- aperm(A, perm=c(1, 3, 2)) dim(A) <- c(27, 3) R4 <- matrix(c(b %*% matrix(rowSums(A), nrow=3)), nrow=3) Petr Savicky. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.