【问题标题】:Calculate distance, given a set of coordinates计算距离,给定一组坐标
【发布时间】:2013-02-18 21:45:09
【问题描述】:

我的问题很简单,但我正在寻找它的矢量化形式。

我的代码是:

HubHt =  110; % Hub Height
GridWidth =  150; % Grid length along Y axis
GridHeight =  150; % Grid length along Z axis
RotorDiameter =  min(GridWidth,GridHeight); % Turbine Diameter
Ny =  31;
Nz =  45;
%% GRID DEFINITION

dy = GridWidth/(Ny-1);
dz = GridHeight/(Nz-1);
if isequal(mod(Ny,2),0)
    iky = [(-Ny/2:-1) (1:Ny/2)];
else
    iky = -floor(Ny/2):ceil(Ny/2-1);
end

if isequal(mod(Nz,2),0)
    ikz = [(-Nz/2:-1) (1:Nz/2)];
else
    ikz = -floor(Nz/2):ceil(Nz/2-1);
end

[Y Z] = ndgrid(iky*dy,ikz*dz + HubHt);

编辑

目前我正在使用这个解决方案,它具有合理的性能:

coord(:,1) = reshape(Y,[numel(Y),1]);
coord(:,2) = reshape(Z,[numel(Z),1]);
dist_y = bsxfun(@minus,coord(:,1),coord(:,1)');
dist_z = bsxfun(@minus,coord(:,2),coord(:,2)');
dist = sqrt(dist_y.^2 + dist_z.^2);

【问题讨论】:

  • @Dan:我刚刚再次编辑了我的问题。老实说,上一版关于我想如何定义距离的问题有一个明显的缺陷。
  • @TalDarom 是正确的,pdist2 是正确的。 link 来自文档,它声称可以找到 2 个矩阵的每个元素之间的成对距离
  • pdist2 绝对不是答案:我不想计算两个矩阵之间的距离,而是网格上点之间的距离,其中 YZ 代表网格上每个点的笛卡尔坐标。
  • pdist2 绝对是答案 - 我不是说 pdist2(Y, Z) 是 anzwer 但 pdist2 是函数。请参阅我的答案以了解要传递给它的参数。它没有找到 2 个矩阵之间的距离,它找到了两个向量列表的每两个点组合之间的距离,在您的情况下,这两个列表将是相同的 2 个列表,它们只是 Y 和 Z 展平和连接。

标签: matlab vectorization euclidean-distance


【解决方案1】:

我不同意DanTal

我认为您应该使用pdist 而不是pdist2

D = pdist( [Y(:) Z(:)] ); % a compact form
D = squareform( D ); % square m*n x m*n distances.

【讨论】:

    【解决方案2】:

    我同意Tal Darompdist2 正是您需要的功能。它找到两个向量中指定的每对坐标的距离,而不是两个矩阵之间的距离。

    所以我很确定在你的情况下你想要这个:

    pdist2([Y(:), Z(:)], [Y(:), Z(:)])
    

    矩阵[Y(:), Z(:)] 是由 Y-Z 定义的二维空间上所有可能的坐标组合的列表。如果你想要一个包含每个点到另一个点的距离的矩阵,那么你必须在这个矩阵上调用pdist2。结果是一个二维矩阵,尺寸为numel(Y) x numel(Y),虽然你还没有定义它,但我很确定YZ 都是n*m 矩阵,意思是numel(Y) == n*m

    编辑:
    @Shai 建议的更正确的解决方案是使用 pdist,因为我们正在比较同一矩阵中的点:

    pdist([Y(:), Z(:)])
    

    【讨论】:

    • 调整为使用 pdist 而不是 shai 建议的 pdist2。这更正确。
    【解决方案3】:

    你可以使用matlab函数pdist2(我认为是在统计工具箱里)或者你可以在网上搜索这个函数的开源好的实现。

    另外, 看看这个答案:pdist2 equivalent in MATLAB version 7

    【讨论】:

    • 我不想要两个矩阵之间的距离:我已经知道pdinst2。无论如何,我会更好地阅读它。
    猜你喜欢
    • 1970-01-01
    • 2010-10-27
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    相关资源
    最近更新 更多