我很难可视化地为我的问题编写代码,因为我非常习惯使用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]
发布于 2013-10-12 01:57:29
我认为您可能需要使用pdist
的“城市块”度量。
pdist(X,'cityblock')
这很接近,但并不完全符合您的需要,所以您可以定义自己的距离函数并按如下方式使用它,
distfun = @(XI,XJ) sum(bsxfun(@minus,XI,XJ),2); % swap XI,XJ if needed
D = squareform(pdist(X,distfun))
注意,您想要的非绝对距离度量是而不是对称的,但是pdist
只计算矩阵的一个三角形的一半,而pdist
强制它是对称的。如果这不是您想要的,那么尝试一个循环:
>> 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示例数据和所需矩阵的解决方案。
https://stackoverflow.com/questions/19329548
复制相似问题