【问题标题】:Find a path in a matrix based on cells value (R)根据单元格值 (R) 在矩阵中查找路径
【发布时间】:2021-11-04 02:01:38
【问题描述】:

我有一个给定二进制矩阵 0 或 1 的计算。当我绘制它时,这些矩阵总是显示具有值“1”的单元格创建一个路径,如下图所示。路径并不总是从一个边界到另一个边界。

我想沿着这条路径创建一个向量或一条线,如下图所示(红线只是一个图例,用于说明我在提到创建向量或线时的意思)。

目标是使用这条线来执行计算:从特定单元格到这条线的最短距离等。

setwd("C:/Users/Desktop/test/")
mat <- read.csv("test.csv",  header = TRUE)
mat <- as.matrix(mat)
mat
      X0 X0.1 X0.2 X0.3 X1 X1.1 X1.2 X1.3 X1.4 X0.4 X0.5
 [1,]  0    0    0    0  1    1    1    1    0    0    0
 [2,]  0    0    0    0  1    1    0    0    0    0    0
 [3,]  0    0    0    0  1    1    0    0    0    0    0
 [4,]  0    0    0    0  1    1    0    0    0    0    0
 [5,]  0    0    0    0  1    1    0    0    0    0    0
 [6,]  0    0    0    0  1    0    0    0    0    0    0
 [7,]  0    0    0    0  1    0    0    0    0    0    0
 [8,]  0    0    0    1  1    0    0    0    0    0    0
 [9,]  0    0    0    1  1    0    0    0    0    0    0
[10,]  0    0    0    1  1    0    0    0    0    0    0
[11,]  0    0    1    1  0    0    0    0    0    0    0
[12,]  0    0    1    1  0    0    0    0    0    0    0
[13,]  0    0    1    1  0    0    0    0    0    0    0
[14,]  0    0    1    1  0    0    0    0    0    0    0
[15,]  0    0    0    1  0    0    0    0    0    0    0
[16,]  0    0    0    1  0    0    0    0    0    0    0
[17,]  0    0    0    1  0    1    0    0    0    0    0
[18,]  0    0    0    1  1    0    0    0    0    0    0
[19,]  0    0    0    1  1    0    0    0    0    0    0
[20,]  0    0    0    1  1    0    0    0    0    0    0
[21,]  0    0    0    1  1    0    0    0    0    0    0
[22,]  0    0    0    1  1    0    0    0    0    0    0
[23,]  0    0    0    1  1    0    0    0    0    0    0
[24,]  0    0    0    0  1    0    0    0    0    0    0
[25,]  0    0    0    0  1    1    0    0    0    0    0
[26,]  0    0    0    1  1    1    1    0    0    0    0
[27,]  0    0    0    0  1    1    1    1    1    0    0
[28,]  0    0    0    0  0    0    1    1    1    0    0

【问题讨论】:

  • 提供可重现的示例数据:dput(mat)。另外,你试过什么?
  • 这条红线代表什么?如何计算单元格到红线的距离?
  • 红线代表我想要的。找到路径并用一条简单的线简化它,我可以用它来计算距离等

标签: r matrix vector


【解决方案1】:

我使用的包分段如下图:

##clean Global Environment
rm(list=ls())
gc(reset=TRUE)
plot.new()
memory.size(TRUE)
##############################################################
##############################################################
##############################################################
library(data.table)
library(igraph)
##############################################################
##############################################################
##############################################################
setwd("C:/Users/Desktop/test/")
mat <- read.csv("test.csv",  header = TRUE)
mat <- as.matrix(mat)

#dimension matrix
v <- dim(mat)[1]
h <- dim(mat)[2]

df <- data.frame()

ind <- 0

for(j in 1:v){
  for(k in 1:h){
    if (mat[j,k] == 1){
      ind <- ind+1
      df[ind, 1:3] <- data.frame(j, k, mat[j,k])
    }
  }
}

library(segmented)
set.seed(12)
xx <- df$j
yy <- df$k
zz <- df$mat.j..k.

dati <- data.frame(x = xx, y = yy)
out.lm <- lm(y ~ x, data = dati)
o <- segmented(out.lm, seg.Z = ~x, psi = list(x = c(2,4)),
               control = seg.control(display = FALSE))
dat2 = data.frame(x = xx, y = broken.line(o)$fit)

library(ggplot2)
ggplot(dati, aes(x = x, y = y)) +
  geom_point() +
  geom_line(data = dat2, color = 'blue')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多