Изменить записи в матрице, используя записи матрицы

Я пытаюсь сделать свою матрицу (tc) симметричной (используя R), добавляя соответствующие элементы и разделяя их на сумму соответствующих диагональных элементов (tc[i,j]+tc[j,i])/(tc[ i,i]+tc[j,j]). Я пробовал это с циклами, но это не дает мне правильных значений, не говоря уже о том, чтобы сделать матрицу симметричной. Это мой код до сих пор:

    for (i in 1:end){
      for(j in 1:end){
        tc[i,j]<-(tc[i,j]+tc[j,i])/(tc[i,i]+tc[j,j])
      }
    }

Вероятно, это очень очевидная ошибка, но я не могу ее понять. Может кто-нибудь помочь мне? знак равно


person Linalein    schedule 01.10.2015    source источник
comment
Пожалуйста, приведите воспроизводимый пример   -  person Rich Scriven    schedule 01.10.2015
comment
что такое тк? Вы можете использовать команду dput на нем?   -  person Colonel Beauvel    schedule 02.10.2015


Ответы (1)


Ну, если подумать, вы суммируете значения, которые вы уже обновили (поскольку вы перебираете каждый i и j).

Что, если вы создадите новую матрицу с теми же размерами, что и tc, а затем запустите свой цикл.

newTc <- matrix(0, nrow=nrow(tc), ncol=ncol(tc))
for (i in 1:end){
  for(j in 1:end){
    newTc[i,j]<-(tc[i,j]+tc[j,i])/(tc[i,i]+tc[j,j])
  }
}
person devmacrile    schedule 01.10.2015
comment
Я на самом деле сделал это сегодня утром, и ваше объяснение имеет большой смысл. Я вообще не думал об этом в таком ключе, но, конечно, вы совершенно правы! Благодарю вас! - person Linalein; 02.10.2015