找回密码
 注册
Simdroid-非首页
查看: 119|回复: 6

MATLAB计算距离求助

[复制链接]
发表于 2012-5-20 18:30:24 | 显示全部楼层 |阅读模式 来自 浙江杭州
有一个体,在体中随机取10000个点,编号为1-10000,坐标放入A矩阵,再在这个体中随机取10000个点编号为10001-20000,程序就是想做,怎么求A矩阵的每一个点对应最短距离的B矩阵的点,所以我用一般的循环的话,计算时间较长,所以现在希望有人能提出更好更快速的算法,并附上程序,谢谢
发表于 2012-5-20 19:39:17 | 显示全部楼层 来自 北京
Simdroid开发平台
可以用bsxfun来实现,不知道你电脑内存多大,如果是4G以上并且是64位系统的话,可以运行下面代码:
  1. A = rand(10000,2);
  2. B = rand(10000,2);
  3. C = sqrt(bsxfun(@(x,y)(x-y).^2,A(:,1),B(:,1)')+bsxfun(@(x,y)(x-y).^2,A(:,2),B(:,2)'));
复制代码
C(i,j)表示点A(i)和点B(j)之间的距离,用[~,ind] = min(C,[],2)即可求出你想要的B中对应点的索引。如果提示内存溢出,那就在内存充足的情况下,尽可能把A分几大块来操作。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2012-5-20 20:23:29 | 显示全部楼层 来自 浙江杭州
rocwoods 发表于 2012-5-20 19:39
可以用bsxfun来实现,不知道你电脑内存多大,如果是4G以上并且是64位系统的话,可以运行下面代码:C(i,j)表 ...





比如我的数据如附件,我现在要求nodek里面节点对应的noden的最近的节点编号,节点文件里面第一列是节点号,谢谢楼主,你的程序我没怎么看懂,希望你帮我实现下,过程帮我截图吧,发到984557212@qq.com.万分感谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2012-5-20 20:24:57 | 显示全部楼层 来自 浙江杭州
rocwoods 发表于 2012-5-20 19:39
可以用bsxfun来实现,不知道你电脑内存多大,如果是4G以上并且是64位系统的话,可以运行下面代码:C(i,j)表 ...

还有我只有3个仿真币,想全部都给你,但不知道怎么给,感谢你的帮助
回复 不支持

使用道具 举报

发表于 2012-5-21 09:27:19 | 显示全部楼层 来自 北京
qinjs060933 发表于 2012-5-20 20:23
比如我的数据如附件,我现在要求nodek里面节点对应的noden的最近的节点编号,节点文件里面第一列是节 ...

哎,怎么这么懒呢,难道对bsxfun这么NB的函数没有一点研究兴趣?我自己觉得例子够有针对性了。钥匙和路线图都给你了,自己研究的话即使不看MATLAB中bsxfun的帮助文档,照猫画虎也能做个大概。

我当时搞这些的时候,没有一个人给个提示,几乎是黑暗中摸索,硬着头皮在MATLAB帮助文档中大海捞针。

点评

诚如君言  发表于 2012-5-21 14:05
回复 不支持

使用道具 举报

发表于 2012-5-22 15:13:24 | 显示全部楼层 来自 上海
新手学习中!
回复 不支持

使用道具 举报

 楼主| 发表于 2012-5-22 22:07:54 | 显示全部楼层 来自 浙江杭州
rocwoods 发表于 2012-5-21 09:27
哎,怎么这么懒呢,难道对bsxfun这么NB的函数没有一点研究兴趣?我自己觉得例子够有针对性了。钥匙和路线 ...

回复,谢谢哈,在你的鞭策下,摸索了,搞定了
回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-2 02:30 , Processed in 0.040454 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表