2015-04-24 2 views
2

У меня довольно простое вычисление, которое мне нужно сделать, но я не могу понять, как это сделать так, чтобы это было даже близко к эффективному. У меня есть большая матрица NxN, и мне нужно вычислить следующее:Избегайте вложенных циклов при суммировании по матричным индексам

enter image description here

Я все еще довольно неопытен в кодировании, и поэтому единственный способ, который приходит на ум, чтобы сделать простые вещи и использовать 3 для петель, чтобы перемещаться по показателям:

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] 
     } 
    } 
} 

Излишне говорить, что для любой приличной матрицы размера это занимает навсегда, чтобы бежать. Я знаю, что должен быть лучший, более эффективный способ сделать это, но я не могу понять это.

+5

Попробуйте 'sum (A% *% A)' – nicola

+0

Ну, это замечательно, спасибо! –

+1

@nicola Почему вы не публикуете свои комментарии? –

ответ

2

Если вы не учитываете суммы k и i, вы можете понять, что вы просто делаете матричный продукт A с собой. Такой продукт в R получается через оператор %*%. После расчета этой матрицы, вам просто нужно просуммировать все элементы вместе:

sum(A %*% A) 

должен дать результат, который вы ищете.

Смежные вопросы