我有以下用于计算Minkowski距离的java代码,
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
请提出任何建议
答案 0 :(得分:4)
你的问题是,
1/q=0
java中的(至少对于q>1
)但
1/p!=0
在matlab中。
所以你需要通过浮点除法替换整数除法并使用
1.0/q