背景
扩展this问题。我有一组点(在三轴系统中,所以有(x,y,z)坐标),我想计算每个点之间的距离。
为此,我首先必须制作一个包含所有可能的点组合的矩阵(最好没有重复,以节省处理时间),然后计算所有距离。
问题
现在我正在尝试使用meshgrid
,但它变得非常复杂。它变得复杂,因为(x,y,z)坐标位于矩阵中,格式为:pointCoordinates[x,y,z,pointnumber]
我不知道如何告诉meshgrid
只是将点-1和点2等结合起来,而不是将所有单独的x坐标与所有单独的y坐标等组合在一起(等)这是太多的组合,其中大部分是没用的。)
问题
如何保持meshgrid不会产生多余的坐标组合?或者有更简单的方法吗?
我想我可以将pointCoordinates
矩阵重新格式化为一个简单的字符串数组points
(条目与坐标一样多)。其中入口1是(1,3,5),入口2(2,4,2)等。从而将坐标保持在一起,并限制可能组合的数量。但这似乎是多余的。
答案 0 :(得分:1)
您可以为x
,y
和z
创建3个网格网格。
x = pointCoordinates(:,1);
y = pointCoordinates(:,2);
z = pointCoordinates(:,3);
[X1,X2] = meshgrid(x,x);
[Y1,Y2] = meshgrid(y,y);
[Z1,Z2] = meshgrid(z,z);
然后计算每个距离:
(X1-X2).^2 + (Y1-Y2).^2 + (Z1-Z2).^2;
现在,您需要提取下对角线部分,因为存在重复。
答案 1 :(得分:1)
确实有一种更简单的方法。如果您只想计算非冗余点,可以使用pdist。请注意,您可以选择与欧几里得不同的距离度量。
distances = pdist(pointCoordinates(:,1:3));
来自帮助:
输出D按((2,1),(3,1),...,(m,1),(3,2),...(m,2)的顺序排列, .....(m,m-1)),即按列顺序的完整m-by-m距离矩阵的左下三角形。为了获得第i个和第j个观测值之间的距离(i