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 I believe that using dim(Q) <- c(3,3,3,3) and function aperm() as suggested by David can simplify this approach. 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.