Java 闵可夫斯基距离码
我有java代码,下面是我用来计算Minkowski距离的代码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
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