meatball1982 发表于 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,可以知道,两组数,长得一样。



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,
% 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=;


% 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;
% =fun_mm_subplot_pos(n_row,n_col,sbp_width,sbp_heig);
% h=figure(1)
% set(h, 'Position', );


% 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
%



页: [1]
查看完整版本: 豆粑粑  散点求相互距离,相互距离求散点