【问题标题】:Minkowski distance code闵可夫斯基距离码
【发布时间】:2016-07-16 19:09:03
【问题描述】:

我有下面的 java 代码,我用它来计算 Minkowski 距离,

 class Minkowski {
 public static void main( String  [] arg){
    int p=2;
    double [] Mski = new double[5];

    double  [] a = { 1, 2, 3, 4,5};
    double  [] b = { 6,7,8,9,11};
   System.out.println(Arrays.toString(Minkowski1(a,b,p);
 }
public static double Minkowski1( double [] a , double [] b, int q)  
{ 
    double sum = 0;
    for(int f = 0; f < a.length; f++){
        sum += Math.pow( Math.abs(a[f] - b[f]),q );
    }
    return Math.pow(sum, 1.0 / q);
 }

该代码与 Minkowski 距离 matlab 代码产生不同的结果:

for i=1 : 5
    result2(i)=sum(abs(X(i)-Y(i)).^p).^(1/p)
end
the result in matlab is 5 5 5 5 6,and java one is not same 

请给点建议

【问题讨论】:

  • 我认为您应该更具体地了解结果的差异,即针对哪个测试用例。
  • 如果您寻求帮助以使您的 matlab 代码正确,也许您应该明确地说出来。还有我们应该怎么知道 X,Y 是什么?

标签: java matlab


【解决方案1】:

你的问题是,

1/q=0

在java中(至少对于q&gt;1)但是

1/p!=0

在matlab中。

所以需要通过浮点除法来代替整数除法并使用

1.0/q

【讨论】:

  • 你也应该提供解决方案:)
  • @ead 我将 1/q 更改为 1.0/q 但结果仍有问题??
  • @novin 哪个结果是正确的?你确定你的matlab代码没问题吗? java的结果是什么,matlab的结果是什么?
  • @Ead,matlab 一个是正确的,我用两种方法来检查它我把它放在这里的代码也是 matlab 中的 Minkowski 方法:/* for i=1: 5 D(i) = pdist2(X(i),Y(i),'minkowski',P) 结束 */
  • @novin 我会说你以错误的方式使用pdist2,Minkowski 距离是 R^n->R 的函数。你应该打电话给pdist2(X,Y, 'minkowski', P)。你使用它的方式,它是 R^n->R^n 只是 abs(X-Y) 这不是 Minkowski 距离。我还要说你的 java 代码产生了正确的结果。你应该用纸和铅笔检查它(不要相信你不完全理解的程序!)
猜你喜欢
  • 2019-04-03
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多