将阵列重塑为距离矩阵(在R中)

时间:2016-01-31 21:38:35

标签: r matrix distance

我有一个阵列是由对称方阵的底三角形(即距离矩阵)展平而产生的。我想要反转这个过程并从数组中生成完整的方阵。

让我们说原始矩阵是:

0 1 2 4
1 0 3 5
2 3 0 6
4 5 6 0

下三角是:

1
2 3
4 5 6

......然后将其展平并记录为数组

1 2 3 4 5 6

我想获取该数组并将其转换回原始矩阵。我希望它像

一样简单
as.matrix(as.dist(ar)) +  t(as.matrix(as.dist(ar)))

...但as.dist(...)实际上以各种方式计算距离,而不是简单地填充数组中的值。可能有一个简单的选择,对吧?

2 个答案:

答案 0 :(得分:2)

ar <- 1:6
d <- (1 + sqrt(1 + 8 * length(ar))) / 2
x <- matrix(0, d, d)
x[upper.tri(x)] <- ar
x[lower.tri(x)] <- t(x)[lower.tri(x)]
x
#      [,1] [,2] [,3] [,4]
# [1,]    0    1    2    4
# [2,]    1    0    3    5
# [3,]    2    3    0    6
# [4,]    4    5    6    0

答案 1 :(得分:1)

n1为1 + 2 + 3 + ... + n1是x的长度,让n = n1 + 1.然后m是nxn矩阵这样:

ar <- 1:6

n <- which(cumsum(seq_along(ar)) == length(ar)) + 1

m <- matrix(0, n, n)
as.dist(t(replace(m, upper.tri(m), ar)))

,并提供:

  1 2 3
2 1    
3 2 3  
4 4 5 6