楼主: yanganggood
1014 2

[问答] 小白求教:计算距离的一个for循环老是显示脚标有误 [推广有奖]

  • 0关注
  • 0粉丝

高中生

25%

还不是VIP/贵宾

-

威望
0
论坛币
70 个
通用积分
3.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
429 点
帖子
5
精华
0
在线时间
44 小时
注册时间
2016-5-12
最后登录
2022-4-15

10论坛币
  1. for(i in 1 : nrow(a)){
  2.      for(j in 1 : nrow(b)){
  3.           #让b的每一条数据轮流与a计算距离
  4.           a_b[i,j] <- as.matrix(dist(rbind(a[i,], b[j,]), method = "euclidean"))
  5.    }
  6. }
复制代码
菜鸟求助a是50条数据(鸢尾花的数据),b也是50条数据,想让a的每条数据与b的每条数据算一下距离,然后生成一个矩阵a_b,例如a的第一条数据和b的第一条数据距离就是a_b[1,1],a的第二条数据与b的第一条数据的距离就是a_b[2,1]。但是现在报误:incorrect number of subscripts on matrix,不知道如何修改,请大神赐教

最佳答案

fyc7346165 查看完整内容

下面给了我的方法和你的方法,结果的矩阵都是第m行第n列的数值=a的第n行和b的第m行的距离推荐mydist,速度应该能快10倍左右
关键词:for循环 For
沙发
fyc7346165 发表于 2019-1-14 15:39:09 |只看作者 |坛友微信交流群
下面给了我的方法和你的方法,结果的矩阵都是第m行第n列的数值=a的第n行和b的第m行的距离
  1. mydist <- function(a, b) {
  2.   apply(a, 1, function(vec, mat) {
  3.     apply(mat, 1, function(x){
  4.       dist(rbind(x, vec))
  5.     })
  6.   }, mat = b)
  7. }

  8. yourdist <- function(a, b) {
  9.   result <- matrix(NA, nrow = nrow(b), ncol = nrow(a))
  10.   for (i in 1:nrow(a))
  11.     for (j in 1:nrow(b))
  12.       result[j, i] <- dist(rbind(a[i, ], b[j, ]))
  13.   return(result)
  14. }
复制代码
推荐mydist,速度应该能快10倍左右
  1. > n <- 100
  2. > a <- data.frame(x = runif(n), y = runif(n))
  3. > b <- data.frame(x = runif(n), y = runif(n))
  4. > system.time(mydist(a, b))
  5. 用户 系统 流逝
  6. 0.25 0.00 0.25
  7. > system.time(yourdist(a, b))
  8. 用户 系统 流逝
  9. 3.34 0.00 3.50
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 50 + 5 + 5 + 5 热心帮助其他会员
cheetahfly + 10 精彩帖子

总评分: 论坛币 + 60  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

藤椅
jinkelazzz 发表于 2019-1-14 18:30:18 |只看作者 |坛友微信交流群
a_b[i,j]里面应该是个数值,不用as.matrix吧

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-23 21:44