我想做一个扭曲的矩阵乘法。
我有这个矩阵:
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
,但我只想要负积的绝对值之和,在这个例子中,第三个 abs[(1)(-1)] 和第四个 abs[(-1)(-1)] 得到 2。
我一直在尝试应用、扫描和循环,但我做不到。感谢您的回复。