Joshua Jones
Joshua Jones

Reputation: 75

Avoid nested for loops when summing over matrix indices

I have a fairly simply computation I need to do, but I cannot figure out how to do it in a way that is even close to efficient. I have a large nxn matrix, and I need to compute the following:

enter image description here

I'm still fairly inexperienced at coding, and so the only way that comes to my mind is to do the straightforward thing and use 3 for loops to move across the indexes:

sum=0
for(i in 1:n)
{
    for(j in 1:n)
    {
        for(k in 1:n)
        {
           sum = sum + A[i,j]*A[j,k]
        }
    }
}

Needless to say, for any decent size matrix this takes forever to run. I know there must be a better, more efficient way to do this, but I cannot figure it out.

Upvotes: 2

Views: 90

Answers (1)

nicola
nicola

Reputation: 24480

If you don't consider the k and i sums, you can realise that you are just doing the matrix product of A with itself. Such product in R is obtained through the %*% operator. After calculating this matrix, you just need to sum all the elements together:

 sum(A %*% A)

should give the result you are seeking.

Upvotes: 2

Related Questions