如何计算距离矩阵中唯一方法的总和

Iatowks

我有一个由3个点的经度和纬度表示的空间数据框:

myData <- structure(list(lng = c(-37.06852042, -37.07473406, -37.07683313
), lat = c(-11.01471746, -11.02468103, -11.02806217)), .Names = c("lng", 
                                                                  "lat"), row.names = c(NA, 3L), class = "data.frame")

接下来,我使用geosphere软件包获取点的距离矩阵(以米为单位,将其转换为km):

> m <- round(distm(myData)/1000,2)
> rownames(m) <- c("A", "B", "C")
> colnames(m) <- c("A", "B", "C")
> m
     A    B    C
A 0.00 1.30 1.74
B 1.30 0.00 0.44
C 1.74 0.44 0.00

鉴于这是一个距离矩阵,我有6种前往A,B和C的方法(例如A-> B-> C,C-> A> -B等),我想从中提取一些信息就像最小距离,中值距离和最大距离一样。

为了说明这一点,我手动计算了示例的所有可能方式:

ways <- c(abc <- 1.3 + 0.44,
             acb <- 1.74 + 0.44,
             bac <- 1.3 + 1.74,
             bca <- 0.44 + 1.74,
             cab <- 1.74 + 1.3,
             cba <- 0.44 + 1.3)
> min(ways)
[1] 1.74
> median(ways)
[1] 2.18
> max(ways)
[1] 3.04

考虑到我将要与10个以上的本地人一起工作并且此问题具有阶乘复杂性,我如何自动执行此任务?

理查德·安伯勒

我编写了一个名为trotter的程序包该程序包将整数映射到不同的排列类型(排列,组合和其他)。对于此问题,您似乎对位置的排列感兴趣。包中的对象之一是使用函数创建置换伪向量ppv

首先安装“猪蹄”:

install.packages("trotter")

然后,您的任务的自动化版本可能类似于:

library(geosphere)
myData <- data.frame(
  lng = c(-37.06852042, -37.07473406, -37.07683313), 
  lat = c(-11.01471746, -11.02468103, -11.02806217)
)

m <- round(distm(myData) / 1000, 2)

locations <- c("A", "B", "C")
rownames(m) <- colnames(m) <- locations

library(trotter)

perms <- ppv(k = length(locations), items = locations)
ways <- c()

for (i in 1:length(perms)) {
  perm <- perms[i]
  route <- paste(perm, collapse = "")
  ways[[route]] <- sum(
    sapply(
      1:(length(perm) - 1),
      function(i) m[perm[i], perm[i + 1]]
    )
  )
}

回到R控制台:

> ways
 ABC  ACB  CAB  CBA  BCA  BAC 
1.74 2.18 3.04 1.74 2.18 3.04 
> # What is the minimum route length?
> min(ways)
[1] 1.74
> # Which route (index) is this?
> which.min((ways))
ABC 
  1 

请记住,就像您说的那样,您正在处理阶乘复杂性,最终可能会在多个位置运行此蛮力搜索而最终等待一段时间...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

宏是强制内联的唯一方法

来自分类Dev

通过参数忽略的R唯一方法

来自分类Dev

Atlas-run是查看更改如何反映的唯一方法吗?

来自分类Dev

:gen-class是在Clojure中扩展Java类的唯一方法吗?

来自分类Dev

在Javascript中,函数声明是创建构造函数的唯一方法吗?

来自分类Dev

<br />标记似乎是在表格中垂直分隔div的唯一方法?

来自分类Dev

:gen-class是在Clojure中扩展Java类的唯一方法吗?

来自分类Dev

是通过鼠标在 LXQt 中添加快速启动的唯一方法吗?

来自分类Dev

使用 chdir() 是在 Linux C 中更改工作目录的唯一方法吗?

来自分类Dev

是Convert.toInt32(boolean)在C#中执行此操作的唯一方法?

来自分类Dev

在Linux中,获得GAIN根访问权限的唯一方法是执行setuid-root文件?

来自分类Dev

构造函数是在C#中初始化类中非空属性的唯一方法吗?

来自分类Dev

是Convert.toInt32(boolean)在C#中执行此操作的唯一方法?

来自分类Dev

单一方法中的多个等待

来自分类Dev

单一方法中的多个等待

来自分类Dev

如何在另一方法中使用数组中的字符串?

来自分类Dev

Java:如何将两个事件放在同一方法中

来自分类Dev

Spring AOP:无法将方法解析为唯一方法

来自分类Dev

重新设置基准是否是修复错误的“摘樱桃”的唯一方法?

来自分类Dev

是“ eval”将JS“ switch”用作表达式的唯一方法吗?

来自分类Dev

读取文本文件并保留评论的唯一方法

来自分类Dev

这是在Oracle数据库中使用MERGE的唯一方法吗?

来自分类Dev

使用WebAudio API,轮询是观察AudioParam值更改的唯一方法吗?

来自分类Dev

extern是写不是定义的声明的唯一方法吗?

来自分类Dev

吸气剂和塞脂剂是避免原型变异的唯一方法吗?

来自分类Dev

完整克隆是子模块添加分支的唯一方法吗?

来自分类Dev

恢复所有线程使用等待状态通知唯一方法

来自分类Dev

是“ cat / tmp / healthy”是配置Kubernetes命令探针的唯一方法吗?

来自分类Dev

回调是Web API绑定与JavaScript引擎链接的唯一方法吗?

Related 相关文章

  1. 1

    宏是强制内联的唯一方法

  2. 2

    通过参数忽略的R唯一方法

  3. 3

    Atlas-run是查看更改如何反映的唯一方法吗?

  4. 4

    :gen-class是在Clojure中扩展Java类的唯一方法吗?

  5. 5

    在Javascript中,函数声明是创建构造函数的唯一方法吗?

  6. 6

    <br />标记似乎是在表格中垂直分隔div的唯一方法?

  7. 7

    :gen-class是在Clojure中扩展Java类的唯一方法吗?

  8. 8

    是通过鼠标在 LXQt 中添加快速启动的唯一方法吗?

  9. 9

    使用 chdir() 是在 Linux C 中更改工作目录的唯一方法吗?

  10. 10

    是Convert.toInt32(boolean)在C#中执行此操作的唯一方法?

  11. 11

    在Linux中,获得GAIN根访问权限的唯一方法是执行setuid-root文件?

  12. 12

    构造函数是在C#中初始化类中非空属性的唯一方法吗?

  13. 13

    是Convert.toInt32(boolean)在C#中执行此操作的唯一方法?

  14. 14

    单一方法中的多个等待

  15. 15

    单一方法中的多个等待

  16. 16

    如何在另一方法中使用数组中的字符串?

  17. 17

    Java:如何将两个事件放在同一方法中

  18. 18

    Spring AOP:无法将方法解析为唯一方法

  19. 19

    重新设置基准是否是修复错误的“摘樱桃”的唯一方法?

  20. 20

    是“ eval”将JS“ switch”用作表达式的唯一方法吗?

  21. 21

    读取文本文件并保留评论的唯一方法

  22. 22

    这是在Oracle数据库中使用MERGE的唯一方法吗?

  23. 23

    使用WebAudio API,轮询是观察AudioParam值更改的唯一方法吗?

  24. 24

    extern是写不是定义的声明的唯一方法吗?

  25. 25

    吸气剂和塞脂剂是避免原型变异的唯一方法吗?

  26. 26

    完整克隆是子模块添加分支的唯一方法吗?

  27. 27

    恢复所有线程使用等待状态通知唯一方法

  28. 28

    是“ cat / tmp / healthy”是配置Kubernetes命令探针的唯一方法吗?

  29. 29

    回调是Web API绑定与JavaScript引擎链接的唯一方法吗?

热门标签

归档