如何在R中生成48个规则网格样本的欧氏距离矩阵?
在R中生成规则网格采样点的距离矩阵
步骤1:构建采样点的坐标矩阵
先确定48个点的网格布局,这里选择8列×6行的规则网格(8×6=48),相邻点水平/垂直间距均为120cm。通过expand.grid()生成所有点的坐标:
# 设置参数 spacing <- 120 # 相邻点间距(厘米) n_col <- 8 # 网格列数 n_row <- 6 # 网格行数 # 生成所有采样点的坐标(x为水平方向,y为垂直方向) coords <- expand.grid( x = seq(0, (n_col - 1) * spacing, by = spacing), y = seq(0, (n_row - 1) * spacing, by = spacing) )
步骤2:计算欧氏距离矩阵
用R内置的dist()函数计算欧氏距离,再通过as.matrix()转换为48×48的矩阵格式:
# 计算距离矩阵 dist_matrix <- as.matrix(dist(coords, method = "euclidean"))
步骤3:(可选)为矩阵添加自定义命名
如果需要给采样点添加类似A1、A2、B1的命名,可执行以下代码:
# 生成行/列名称(格式:行字母+列数字) point_names <- apply(expand.grid(LETTERS[1:n_row], 1:n_col), 1, function(x) paste0(x[1], x[2])) rownames(dist_matrix) <- point_names colnames(dist_matrix) <- point_names
验证结果
可以通过以下代码验证关键距离是否符合预期:
# A1到A2的距离(应为120cm) dist_matrix["A1", "A2"] # A1到B1的距离(应为120cm) dist_matrix["A1", "B1"] # A1到B2的距离(应为√(120²+120²)≈169.7cm) dist_matrix["A1", "B2"]
你之前使用dist()失败,大概率是因为没有正确生成规则网格的坐标,或是未将dist()返回的dist类对象转换为矩阵格式。
内容的提问来源于stack exchange,提问作者Christoffer Bugge Harder
相关产品推荐
相关产品推荐

