Mathematica中文论坛-非官方
标题:
豆粑粑 散点求相互距离,相互距离求散点
[打印本页]
作者:
meatball1982
时间:
2018-10-19 18:31
标题:
豆粑粑 散点求相互距离,相互距离求散点
本帖最后由 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,可以知道,两组数,长得一样。
clear all
clc
clf
%% outline %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% points 2 distance matrix
% distance matrix 2 points
%% main %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% random seed
rng(2)
% number points --------------------------------------
n_p = 30;
% gen random points, [30 2]
% group 1 -------------------------
p1=10*rand(n_p/3,2);
% group 2 -------------------------
p2=10*rand(n_p/3,2) +15;
% group 3 -------------------------
p3=10*rand(n_p/3,2);
p3(:,1)=p3(:,1)+20;
p=[p1;p2;p3];
% Distance matrix ----------------
dis=pdist(p);
Dis_mat=squareform(dis);
% generate new points from Distance matrix
p_new = mdscale(Dis_mat, 2, 'criterion','metricstress');
% sbp_width=0.8;
% sbp_heig=0.85;
% n_row = 2;
% n_col = 2;
% [out_pos]=fun_mm_subplot_pos(n_row,n_col,sbp_width,sbp_heig);
% h=figure(1)
% set(h, 'Position', [100, 100, 600, 600]);
% plot random points -------------------------------
subplot(2,2,1)
% ax=axes('position',out_pos(1,:));
hold on
plot(p(1:10,1),p(1:10,2),'ro','markerfacecolor','r','markersize',3);
plot(p(11:20,1),p(11:20,2),'go','markerfacecolor','g','markersize',2);
plot(p(21:30,1),p(21:30,2),'bo','markerfacecolor','b','markersize',3);
hold on
for i =1 :n_p
text(p(i,1)-2,p(i,2),mat2str(i),'fontsize',6)
end
axis equal
axis([min(p(:,1))-5, max(p(:,1))+5,...
min(p(:,2))-5, max(p(:,2))+5]);
box on
title('random points')
% plot Distance matrix -----------------------------
subplot(2,2,2)
ax=axes('position',out_pos(2,:));
surf(Dis_mat,'edgecolor','none')
view(0,90)
axis tight
axis equal
colormap(jet)
% plot new points -----------------------------------
subplot(2,2,3)
% ax=axes('position',out_pos(3,:));
hold on
plot(p_new(1:10,1),p_new(1:10,2),'ro','markerfacecolor','r','markersize',3);
plot(p_new(11:20,1),p_new(11:20,2),'go','markerfacecolor','g','markersize',2);
plot(p_new(21:30,1),p_new(21:30,2),'bo','markerfacecolor','b','markersize',3);
hold on
for i =1 :n_p
text(p_new(i,1)-2,p_new(i,2),mat2str(i),'fontsize',6)
end
axis equal
axis([min(p_new(:,1))-5, max(p_new(:,1))+5,...
min(p_new(:,2))-5, max(p_new(:,2))+5]);
box on
% save figure
h=gcf;
fi_na='../file_imgs/fig_p2m__m2p'
fun_work_li_035_myfig_out(h,fi_na,3);
%% logs
% mod : 18-Oct-2018 21:54:52
% mod by : mm
% contact me : meatball1982@163.com
%
复制代码
fig_p2m__m2p.png
(148.17 KB, 下载次数: 2133)
下载附件
2018-10-19 18:32 上传
欢迎光临 Mathematica中文论坛-非官方 (http://ilovemathematica.com/)
Powered by Discuz! X3.2