将数组 reshape 为距离矩阵(在 R 中)

标签 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(...) 实际上会以各种方式计算距离,而不是简单地填充数组中的值。可能有一个简单的替代方案,对吗?

最佳答案

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

关于将数组 reshape 为距离矩阵(在 R 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35119808/

相关文章:

r - forestplot 在图中有异常大的蓝点

image - 在matlab中为矩阵着色

performance - cython 运行速度比 numpy 慢以计算距离

python - 海上距离计算器,中间坐标?

iOS 计算设备垂直移动距离

R 的 lm() 函数删除因子级别(除了截距估计器)而不报告错误或警告

r - 使用 data.table 对 r 中的序列求和

r - effects 包中的effect() 函数错误

python - 坐标的 Numpy 矩阵

python - 如何将numpy数组转换为Matlab矩阵?