如何更高效地创建示例中的对称距离矩阵?
更简便创建该对称距离矩阵的方法
当然有更高效的方法,不用手动逐个定义列向量,以下是几种常用方案:
利用
outer函数(最简洁)
这个函数可以对两个向量做元素级运算,直接生成目标矩阵:n <- 10 # 矩阵维度,可按需调整 distances <- outer(0:(n-1), 0:(n-1), function(x, y) abs(x - y))原理是把0到9的序列和自身做外积,每个位置计算两个元素的绝对值差,完美匹配你手动创建的矩阵结构,而且改
n就能生成任意大小的同类矩阵。借助
dist函数转换dist函数原本用于计算样本间的距离,对于一维的数值序列,它的欧氏距离(默认)或曼哈顿距离就是元素间的绝对值差,转成矩阵即可:n <- 10 distances <- as.matrix(dist(0:(n-1))) # 默认欧氏距离,一维下等价于绝对值差 # 或者显式指定曼哈顿距离,结果一致 distances <- as.matrix(dist(0:(n-1), method = "manhattan"))循环填充矩阵(适合理解逻辑)
先创建空矩阵,再通过循环给每一行赋值,虽然不如前两种简洁,但逻辑直观:n <- 10 distances <- matrix(0, nrow = n, ncol = n) for (i in 1:n) { distances[i, ] <- abs((i-1) - 0:(n-1)) }
这些方法都避免了手动编写大量重复的向量代码,尤其是矩阵规模变大时,优势会非常明显。
内容的提问来源于stack exchange,提问作者Victor Nielsen
相关产品推荐
相关产品推荐

