【发布时间】: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绝对不是答案:我不想计算两个矩阵之间的距离,而是网格上点之间的距离,其中Y和Z代表网格上每个点的笛卡尔坐标。 -
pdist2 绝对是答案 - 我不是说 pdist2(Y, Z) 是 anzwer 但 pdist2 是函数。请参阅我的答案以了解要传递给它的参数。它没有找到 2 个矩阵之间的距离,它找到了两个向量列表的每两个点组合之间的距离,在您的情况下,这两个列表将是相同的 2 个列表,它们只是 Y 和 Z 展平和连接。
标签: matlab vectorization euclidean-distance