Dear R-users,

is there any way to sum up the elements of the "diagonals" of a matrix
without using a for-loop? While there is a simple way over rows and
columns, I don't see a straightforward multiplication for the diagonals,
am I too demanding? Or, more likely, I'm lack some algebra trick? Is
there any R-function that can deal with this problem w/o loop?

Actually I would need to sum up just the upper diagonals.

Here a simple, but general, example for presenting the problem. 

Thanks in advance for any help,
Carlo Giovanni Camarda

m <- 7
n <- 5
mat <- matrix(1:35, n, m)
ones.r <- rep(1,n)
ones.c <- rep(1,m)
# sum over the rows
sum.r <- mat%*%ones.c
# sum over the cols
sum.c <- t(mat)%*%ones.r
# sum over the diags
sum.d <- numeric(m+n-1)
sum.d[1] <- mat[n,1]
sum.d[m+n-1] <- mat[1,m]
for(i in 2:n){
    sum.d[i] <- sum(diag(mat[(n+1-i):n,1:i]))
}
for(i in 2:(m-1)){
    sum.d[i+n-1] <- sum(diag(mat[,i:m]))
}



----------
This mail has been sent through the MPI for Demographic ...{{dropped:10}}

______________________________________________
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.

Reply via email to