首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与公制pdist成对的距离没有

与公制pdist成对的距离没有
EN

Stack Overflow用户
提问于 2013-10-12 01:37:48
回答 1查看 2K关注 0票数 1

我很难可视化地为我的问题编写代码,因为我非常习惯使用pdist

我想做的是计算向量的所有非绝对距离。所以我的度量就是(X),其中x和y是向量中的两个值。

通常,我只需执行以下操作:squareform(pdist(X(:,i))

然而,这将返回欧几里德距离,而不是我的距离。有什么办法可以对付pdist吗?还是有不同的方法?

这是一个我试图计算的例子。

对于X=[1,2,3;4,5,6;7,8,9]

对于第一个矩阵,第一列元素的所有差异的矩阵,我们应该有

D=[(1-1), (1-4), (1-7); (4-1), (4-4), (4-7); (7-1), (7-4), (7-7)]

D=[0,-3,-6;3,0,-3;6,3,0]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-12 01:57:29

我认为您可能需要使用pdist的“城市块”度量。

代码语言:javascript
运行
复制
pdist(X,'cityblock')

这很接近,但并不完全符合您的需要,所以您可以定义自己的距离函数并按如下方式使用它,

代码语言:javascript
运行
复制
distfun = @(XI,XJ) sum(bsxfun(@minus,XI,XJ),2); % swap XI,XJ if needed
D = squareform(pdist(X,distfun))

注意,您想要的非绝对距离度量是而不是对称的,但是pdist只计算矩阵的一个三角形的一半,而pdist强制它是对称的。如果这不是您想要的,那么尝试一个循环:

代码语言:javascript
运行
复制
>> X = [1 2 3; 4 5 6; 7 8 9];
>> D = zeros(size(X,1),size(X,1));
>> % for i=1:size(X,1), D(:,i)=sum(bsxfun(@minus,X,X(i,:)),2); end % my guess
>> % but to get the desired result, here's the appropriate loop:
>> for i=1:size(X,1), D(:,i) = sum(bsxfun(@minus,X,X(:,i)),1); end
>> disp(D)
     0    -3    -6
     3     0    -3
     6     3     0

编辑:OP示例数据和所需矩阵的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19329548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档