Java 闵可夫斯基距离码

Java 闵可夫斯基距离码,java,matlab,Java,Matlab,我有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.toStrin

我有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);
 }
有什么建议吗?你的问题是

1/q=0
在java中(至少对于
q>1
),但是

在matlab中

因此需要通过浮点除法替换整数除法并使用

1.0/q

您还应该提供解决方案:)@ead I将1/q更改为1.0/q,但结果仍然存在问题???@novin,哪个结果是正确的?你确定你的matlab代码是正确的吗?java的结果是什么,matlab的结果是什么?@Ead,matlab的结果是正确的,我用了两种方法检查它,我把它放在这里的代码也是matlab中的Minkowski方法:/*对于i=1:5d(i)=pdist2(X(i),Y(i),'Minkowski',P)end*/@novin我想说你用错了
pdist2
,Minkowski距离是R^n->R的函数。你应该调用
pdist2(X,Y,'Minkowski',P)
。使用它的方式是R^n->R^n只是abs(X-Y),而不是Minkowski距离。我还要说,您的java代码产生了正确的结果。你应该用纸和笔检查(不要相信你不完全理解的程序!)我认为你应该更具体地说明结果的差异,即针对哪个测试用例。如果你寻求帮助以获得正确的matlab代码,也许你应该明确地说出来。我们怎么知道X,Y是什么?
1/p!=0
1.0/q