Matlab如何在其欧几里德距离权重函数中应用权重?

时间:2014-02-20 17:44:53

标签: matlab octave

有人知道Matlab的Z=dist(W,P)是如何工作的吗? Matlab documentation未指定使用权重矩阵W的算法。

我正在使用Octave并试图模仿这种行为。到目前为止,这个stack overflow post帮助我证明了Octave的Z=squareform(pdist(P'))等同于Matlab的Z=dist(P)。我还可以使用几个for循环来指定Z的元素:

function z=dist(w,p)
    for i=1:size(p,2)
        for j=1:size(p,2)
            u=p(:,i);
            v=p(:,j);
            z(i,j)=sum((u-v).^2).^0.5;
        end
    end
end

但是,我无法在权重矩阵W上找到任何在线文档。我不能简单地将squareform(pdist(P'))的输出乘以W,因为尺寸不匹配。我试图预乘W,例如sqrt(W*(P(:,1)-P(:,2)).^2),与this stack overflow post类似,但输出幅度错误。

以下是使用Matlab的示例:

P=     
9     7    10
10    1    10
2     3     2
10    6    10

W=      
10    9     5     8
5     2    10    10

>> D = dist(P)
   0      10.0995    1.0000
10.0995      0      10.3441
1.0000    10.3441      0

>> D = dist(W,P)
3.8730     9.0000    3.7417
12.0000    8.3666   12.3693

提前感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:0)

神经网络工具箱似乎是在Matlab中实现的,因此您只需查看这些源文件并进行计算即可。

如果您在命令窗口中输入dist打开edit dist,则会看到它调用dist.applydist.distance来执行实际工作,后者再次{ {1}}。因此,我的猜测是你正在寻找的东西可以在

的第9行找到
dist.apply

在命令窗口中键入toolbox/nnet/nnet/nndistance/+dist/apply.m 以查看它。