将属性向量转化为元素不同的矩阵
Transform attribute vector into a matrix with differences of elements
与此类似 我需要将属性向量转换为矩阵。这次使用 R.
的元素对之间存在差异
例如,我有一个向量,它报告 N 个人的年龄(从 18 岁到 90 岁)。我需要将这个向量转换成一个名为 A 的 NxN 矩阵(行和列上都有人名),其中每个单元格 Aij 的值为 |age_i-age_j|,代表 i 和 i 两个人之间的绝对年龄差j.
这是一个有 3 个人的例子,第一个 18 岁,第二个 23 岁,第三个 60 岁,产生这个向量:
c(18, 23, 60)
我想把它转换成这个矩阵:
A = matrix( c(0, 5, 42, 5, 0, 37, 42, 37, 0), nrow=3, ncol=3, byrow = TRUE)
tmp <- c(18, 23, 60)
您可以使用 dist
和几个参数:
dist(tmp, upper=TRUE, diag=TRUE)
1 2 3
1 0 5 42
2 5 0 37
3 42 37 0
请注意,dist
函数 returns 是一个 "dist" 对象,因此您可能希望将其强制转换为具有 as.matrix
的矩阵。然后你可以放弃参数:
as.matrix(dist(tmp))
1 2 3
1 0 5 42
2 5 0 37
3 42 37 0
或再次使用outer
。给它输入减法运算符,然后取绝对值。
abs(outer(tmp, tmp, "-"))
[,1] [,2] [,3]
[1,] 0 5 42
[2,] 5 0 37
[3,] 42 37 0
据推测,dist
将比 outer
更快,因为该算法可以利用此类计算中存在的对称性,而 outer
更通用。
与此类似
例如,我有一个向量,它报告 N 个人的年龄(从 18 岁到 90 岁)。我需要将这个向量转换成一个名为 A 的 NxN 矩阵(行和列上都有人名),其中每个单元格 Aij 的值为 |age_i-age_j|,代表 i 和 i 两个人之间的绝对年龄差j.
这是一个有 3 个人的例子,第一个 18 岁,第二个 23 岁,第三个 60 岁,产生这个向量:
c(18, 23, 60)
我想把它转换成这个矩阵:
A = matrix( c(0, 5, 42, 5, 0, 37, 42, 37, 0), nrow=3, ncol=3, byrow = TRUE)
tmp <- c(18, 23, 60)
您可以使用 dist
和几个参数:
dist(tmp, upper=TRUE, diag=TRUE)
1 2 3
1 0 5 42
2 5 0 37
3 42 37 0
请注意,dist
函数 returns 是一个 "dist" 对象,因此您可能希望将其强制转换为具有 as.matrix
的矩阵。然后你可以放弃参数:
as.matrix(dist(tmp))
1 2 3
1 0 5 42
2 5 0 37
3 42 37 0
或再次使用outer
。给它输入减法运算符,然后取绝对值。
abs(outer(tmp, tmp, "-"))
[,1] [,2] [,3]
[1,] 0 5 42
[2,] 5 0 37
[3,] 42 37 0
据推测,dist
将比 outer
更快,因为该算法可以利用此类计算中存在的对称性,而 outer
更通用。