Mathematica中文论坛-非官方

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 15585|回复: 0
打印 上一主题 下一主题

豆粑粑  散点求相互距离,相互距离求散点

[复制链接]

532

主题

602

帖子

3029

积分

论坛元老

Rank: 8Rank: 8

积分
3029
跳转到指定楼层
楼主
发表于 2018-10-19 18:31:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 meatball1982 于 2018-10-19 18:33 编辑

QL的问题,觉得挺有意思,记录一下。
01.已知空间中的散点,求相互距离matrix(一个对称,对应线为0的矩阵)。
02.已知相互距离matrix,如何求散点在哪。

01.是1-1的map.
02则不是,比如把空间中的一堆点P  平移得到P_shift,  or旋转得到P_rot,其相互距离是不变的,但点的位置就变了。不变是是P当中各个点的相互位置。所以在聚类或是只是观察点集合中各个点的相互关系时,是可以通过相互距离matrix来判断的,实际上,在许多cluster 的算法当中,只要相互距离matrix就可以了。

01,是通过pdist函数实现的。n个点,得到(n-1)*(n-2)/2个数。再整成对称的方阵。
02.则是通过一个叫mdscale函数实现的。

随机生成了三个group的数据。原始点和随机点的空间位置不一样,但通过rot和shfit,可以知道,两组数,长得一样。



  1. clear all
  2. clc
  3. clf

  4. %% outline %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  5. % points 2 distance matrix
  6. % distance matrix 2 points

  7. %% main %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  8. % random seed
  9. rng(2)

  10. % number points --------------------------------------
  11. n_p = 30;


  12. % gen random points, [30 2]
  13. % group 1 -------------------------
  14. p1=10*rand(n_p/3,2);
  15. % group 2 -------------------------
  16. p2=10*rand(n_p/3,2) +15;
  17. % group 3 -------------------------
  18. p3=10*rand(n_p/3,2);
  19. p3(:,1)=p3(:,1)+20;
  20. p=[p1;p2;p3];


  21. % Distance matrix ----------------
  22. dis=pdist(p);
  23. Dis_mat=squareform(dis);

  24. % generate new points from Distance matrix
  25. p_new = mdscale(Dis_mat, 2, 'criterion','metricstress');


  26. % sbp_width=0.8;
  27. % sbp_heig=0.85;
  28. % n_row = 2;
  29. % n_col = 2;
  30. % [out_pos]=fun_mm_subplot_pos(n_row,n_col,sbp_width,sbp_heig);
  31. % h=figure(1)
  32. % set(h, 'Position', [100, 100, 600, 600]);

  33.   
  34. % plot random points -------------------------------
  35. subplot(2,2,1)
  36. % ax=axes('position',out_pos(1,:));
  37. hold on
  38. plot(p(1:10,1),p(1:10,2),'ro','markerfacecolor','r','markersize',3);
  39. plot(p(11:20,1),p(11:20,2),'go','markerfacecolor','g','markersize',2);
  40. plot(p(21:30,1),p(21:30,2),'bo','markerfacecolor','b','markersize',3);

  41. hold on
  42. for i =1 :n_p
  43.     text(p(i,1)-2,p(i,2),mat2str(i),'fontsize',6)
  44. end
  45. axis equal
  46. axis([min(p(:,1))-5, max(p(:,1))+5,...
  47.       min(p(:,2))-5, max(p(:,2))+5]);
  48. box on
  49. title('random points')


  50. % plot Distance matrix -----------------------------
  51. subplot(2,2,2)
  52. ax=axes('position',out_pos(2,:));
  53. surf(Dis_mat,'edgecolor','none')
  54. view(0,90)
  55. axis tight
  56. axis equal
  57. colormap(jet)

  58. % plot new points -----------------------------------
  59. subplot(2,2,3)
  60. % ax=axes('position',out_pos(3,:));
  61. hold on
  62. plot(p_new(1:10,1),p_new(1:10,2),'ro','markerfacecolor','r','markersize',3);
  63. plot(p_new(11:20,1),p_new(11:20,2),'go','markerfacecolor','g','markersize',2);
  64. plot(p_new(21:30,1),p_new(21:30,2),'bo','markerfacecolor','b','markersize',3);


  65. hold on
  66. for i =1 :n_p
  67.     text(p_new(i,1)-2,p_new(i,2),mat2str(i),'fontsize',6)
  68. end
  69. axis equal
  70. axis([min(p_new(:,1))-5, max(p_new(:,1))+5,...
  71.       min(p_new(:,2))-5, max(p_new(:,2))+5]);
  72. box on

  73. % save figure
  74. h=gcf;
  75. fi_na='../file_imgs/fig_p2m__m2p'
  76. fun_work_li_035_myfig_out(h,fi_na,3);

  77. %% logs
  78. % mod : 18-Oct-2018 21:54:52
  79. % mod by : mm
  80. % contact me : meatball1982@163.com
  81. %

复制代码


fig_p2m__m2p.png (148.17 KB, 下载次数: 1629)

fig_p2m__m2p.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|Mathematica中文论坛-非官方 ( 辽ICP备16001491号-1

GMT+8, 2024-4-26 02:58 , Processed in 0.118328 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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