Я хочу сделать матричное умножение с изюминкой.
У меня есть эта матрица:
A <- matrix(c(1,-1,-1,0,-1,0,1,0,0,1,0,0,0,1,-1,1,-1,0,0,-1,1,0,1,0,1,-1,-1,1,-1,1), nrow = 6, ncol = 5)
A
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 0 0 1
[2,] -1 0 1 -1 -1
[3,] -1 0 -1 1 -1
[4,] 0 1 1 0 1
[5,] -1 0 -1 1 -1
[6,] 0 0 0 0 1
И я хочу получить две разные матрицы. Первая матрица такова:
C
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0 0 0 2 0 1
[2,] 0 0 2 1 2 0
[3,] 0 2 0 0 4 0
[4,] 2 1 0 0 0 1
[5,] 0 2 4 0 0 0
[6,] 1 0 0 1 0 0
Эта «матрица сходимости» чем-то похожа на умножение A для ее транспонирования (в R это что-то вроде этого A%*%t(A)
), но с небольшим поворотом, во время суммирования для получения каждой ячейки мне нужна только сумма положительных значений. Например, для ячейки C23 обычная сумма будет такой:
(-1)(-1) + (0)(0) + (1)(-1) + (-1)(1) + (-1)(-1) = 0
, но мне нужна только сумма положительных произведений, в этом примере первое [(-1)(-1)] и последнее [(-1)(-1)] для получения 2.
Вторая матрица такова:
D
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0 2 2 0 2 0
[2,] 2 0 2 1 2 1
[3,] 2 2 0 2 0 1
[4,] 0 1 2 0 2 0
[5,] 2 2 0 2 0 1
[6,] 0 1 1 0 1 0
Эта «матрица расхождений» похожа на предыдущую, с той разницей, что я хочу суммировать только абсолютные значения отрицательных значений. Например, для ячейки D23 обычная сумма будет такой:
(-1)(-1) + (0)(0) + (1)(-1) + (-1)(1) + (-1)(-1) = 0
, но мне нужна только сумма абсолютных значений отрицательных произведений, в этом примере третий абс [(1)(-1)] и четвертый абс[(-1)(-1)] для получения 2.
Я пытался с применением, разверткой и циклами, но я не могу этого добиться. Спасибо за ваши ответы.
C
неверно. РазвеC[1,1]
не должно быть 3? - person alistaire   schedule 14.04.2017diag(C) <- 0
- person Ivan   schedule 15.04.2017