需要了解更多关注:https://blog.youkuaiyun.com/linbossdeboke
qq交流群:651587317
package oushijuli;
public class test {
/**
* 两个向量可以为任意维度,但必须保持维度相同,表示n维度中的两点
* 欧式距离
* @param vector1
* @param vector2
* @return 两点间距离
*/
public void sim_distance(double[] vector1, double[] vector2) {
double distance = 0;
if (vector1.length == vector2.length) {
for (int i = 0; i < vector1.length; i++) {
double temp = Math.pow((vector1[i] - vector2[i]), 2);
distance += temp;
}
distance = Math.sqrt(distance);
}
System.out.println(distance);
}
//向量a与矩阵的欧式距离--------------------------------------------------------------------
public void jsim_distance(double[] vector1, double[][] vector2) {
double distance[]= new double[vector2.length];
if (vector1.length == vector2[0].length) {
for (int i = 0; i < vector1.length; i++) {
for(int j=0;j<vector2.length;j++){
distance[j] += Math.pow((vector1[i] - vector2[i][j]), 2);
} }}
for (int i = 0; i < distance.length; i++) {
distance[i] = Math.sqrt(distance[i]); }
for(int i=0;i< distance.length;i++){
System.out.println( distance[i]);}
}
//标准化欧式距离-------------------------------------------------------------
public void bzsim_distance(double[] vector1, double[][] vector2) {
double []s=new double[vector2.length+1];
double []avg=new double[vector2.length];
// vector2均值
for(int i=0;i<vector2.length;i++){
for(int j=0;j<vector2[0].length;j++){
avg[i]+=vector2[i][j];
} }
// vector1均值
double avg0=0;
for(int i=0;i<vector1.length;i++){
avg0+=vector1[i];
}
//vector1方差
if (vector1.length == vector2[0].length) {
for (int i = 0; i < vector1.length; i++) {
s[0]+=Math.pow( vector1[i]-avg0,2);
}
s[0]=Math.sqrt(s[0]/vector2.length);
}
//vector2方差
for (int i = 0; i < vector2.length; i++) {
for(int j=0;j<vector2[0].length;j++){
s[i+1]+= Math.pow( vector2[i][j]-avg[i],2);
}
s[i+1]=Math.sqrt(s[i]/vector2.length);
}
//标准化欧氏距离
double distance[]= new double[vector2.length];
for (int i = 0; i < vector1.length; i++) {
for(int j=0;j<vector2.length;j++){
double temp= Math.pow((vector1[i] - vector2[j][i]), 2)/s[i];
distance[j] = distance[j]+temp;
} }
for (int i = 0; i < distance.length; i++) {
distance[i] = Math.sqrt(distance[i]); }
for(int i=0;i< distance.length;i++){
System.out.println( distance[i]);}
}
public static void main(String[] args){
System .out.println("普通欧氏距离");
test s1=new test();
double[]a={5,5,1};
double[]b={1,2,1};
s1.sim_distance(a,b);
System .out.println("矩阵欧氏距离");
//向量a与矩阵的欧式距离
double[][]c={{1,5,1},{2,7,1},{1,1,1}};
s1.jsim_distance(a,c);
//向量a与矩阵的标准欧式距离
System .out.println("标准欧氏距离");
s1.bzsim_distance(a,c);
}
}
该博客介绍了如何使用Java编写欧氏距离的计算方法,包括两点间的欧氏距离、一个向量与矩阵的欧氏距离数组以及标准化欧氏距离。提供了详细的代码示例和解释。

被折叠的 条评论
为什么被折叠?



