通过从 vector 的其他元素中减去 vector 的每个元素来制作矩阵
Make matrix by subtracting each element of vector from other element of it
考虑向量 a <- c(17.4, 17.2, 17.0, 16.9, 17.0, 17.4)
如何构建以下矩阵:
A <- 17.4-17.4 17.2-17.4 17.0-17.4 16.9-17.4 17.0-17.4 17.4-17.4
17.4-17.2 17.2-17.2 17.4-17.2 16.9-17.2 17.0-17.2 17.4-17.2
17.4-17.0 17.2-17.0 17.0-17.0 16.9-17.0 17.0-17.0 17.4-17.0
17.4-16.9 17.2-16.9 17.0-16.9 16.9-16.9 17.0-16.9 17.4-16.9
17.4-17.0 17.2-17.0 17.0-17.0 16.9-17.0 17.0-17.0 17.4-17.0
17.4-17.4 17.2-17.4 17.0-17.4 16.9-17.4 17.0-17.4 17.4-17.4
我想从第一个元素中减去所有向量元素并将结果存储在矩阵A的第一行,然后从第二个元素中减去所有向量元素并将结果存储在矩阵A第二行中,并且依此类推,直到到达向量 an 的最后一个元素。
最终结果应该是:
A <- 0.0 -0.2 -0.4 -0.5 -0.4 0.0
0.2 0.0 -0.2 -0.3 -0.2 0.2
0.4 0.2 0.0 -0.1 0.0 0.4
0.5 0.3 0.1 0.0 0.1 0.5
0.4 0.2 0.0 -0.1 0.0 0.4
0.0 -0.2 -0.4 -0.5 -0.4 0.0
使用外部
a <- c(17.4, 17.2, 17.0, 16.9, 17.0, 17.4)
t(outer(a,a,`-`))
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0.0 -0.2 -0.4 -0.5 -0.4 0.0
[2,] 0.2 0.0 -0.2 -0.3 -0.2 0.2
[3,] 0.4 0.2 0.0 -0.1 0.0 0.4
[4,] 0.5 0.3 0.1 0.0 0.1 0.5
[5,] 0.4 0.2 0.0 -0.1 0.0 0.4
[6,] 0.0 -0.2 -0.4 -0.5 -0.4 0.0
这里有几个选项,
sapply(a, function(i) i-a)
matrix(Reduce(`-`, expand.grid(a,a)), ncol = length(a))
考虑向量 a <- c(17.4, 17.2, 17.0, 16.9, 17.0, 17.4)
如何构建以下矩阵:
A <- 17.4-17.4 17.2-17.4 17.0-17.4 16.9-17.4 17.0-17.4 17.4-17.4
17.4-17.2 17.2-17.2 17.4-17.2 16.9-17.2 17.0-17.2 17.4-17.2
17.4-17.0 17.2-17.0 17.0-17.0 16.9-17.0 17.0-17.0 17.4-17.0
17.4-16.9 17.2-16.9 17.0-16.9 16.9-16.9 17.0-16.9 17.4-16.9
17.4-17.0 17.2-17.0 17.0-17.0 16.9-17.0 17.0-17.0 17.4-17.0
17.4-17.4 17.2-17.4 17.0-17.4 16.9-17.4 17.0-17.4 17.4-17.4
我想从第一个元素中减去所有向量元素并将结果存储在矩阵A的第一行,然后从第二个元素中减去所有向量元素并将结果存储在矩阵A第二行中,并且依此类推,直到到达向量 an 的最后一个元素。
最终结果应该是:
A <- 0.0 -0.2 -0.4 -0.5 -0.4 0.0
0.2 0.0 -0.2 -0.3 -0.2 0.2
0.4 0.2 0.0 -0.1 0.0 0.4
0.5 0.3 0.1 0.0 0.1 0.5
0.4 0.2 0.0 -0.1 0.0 0.4
0.0 -0.2 -0.4 -0.5 -0.4 0.0
使用外部
a <- c(17.4, 17.2, 17.0, 16.9, 17.0, 17.4)
t(outer(a,a,`-`))
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0.0 -0.2 -0.4 -0.5 -0.4 0.0
[2,] 0.2 0.0 -0.2 -0.3 -0.2 0.2
[3,] 0.4 0.2 0.0 -0.1 0.0 0.4
[4,] 0.5 0.3 0.1 0.0 0.1 0.5
[5,] 0.4 0.2 0.0 -0.1 0.0 0.4
[6,] 0.0 -0.2 -0.4 -0.5 -0.4 0.0
这里有几个选项,
sapply(a, function(i) i-a)
matrix(Reduce(`-`, expand.grid(a,a)), ncol = length(a))