用java编写欧氏距离,标准欧氏距离,以及当输入是一个矩阵时返回一个欧氏距离数组
来源:互联网 发布:2017年度网络流行语 编辑:程序博客网 时间:2024/05/21 05:59
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);
}
}
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);
}
}
阅读全文
0 0
- 用java编写欧氏距离,标准欧氏距离,以及当输入是一个矩阵时返回一个欧氏距离数组
- 曼哈顿距离、欧氏距离
- 使用TensorFlow实现余弦距离/欧氏距离(Euclidean distance)以及Attention矩阵的计算
- 使用TensorFlow实现余弦距离/欧氏距离(Euclideandistance)以及Attention矩阵的计算
- 欧氏距离 vs 马氏距离
- 欧氏距离 vs 马氏距离
- 欧氏距离 vs 马氏距离
- 欧氏距离与马氏距离
- 马氏距离和欧氏距离
- Mahalanobis距离 Vs. 欧氏距离
- 曼哈顿距离和欧氏距离比较
- 曼哈顿距离与欧氏距离
- 【Python】欧氏距离和余弦距离
- 欧氏距离与余弦距离
- c++计算两矩阵欧氏距离
- 欧氏距离
- 欧氏距离
- 欧氏距离
- php实现斐波那契数列
- javaWeb文档预览之office转pdf(附详细代码)
- POJ
- hdu 1754 基础线段树
- fast rcnn 代码解析(一)
- 用java编写欧氏距离,标准欧氏距离,以及当输入是一个矩阵时返回一个欧氏距离数组
- 设计模式学习笔记三:简单工厂(Simple Factory)
- 原型理解
- lua middleclass 的一个要注意的问题,静态属性
- 8.9 17倍times17 2492
- char *转WCHAR *
- 大话数据结构 code 第八章 02二叉排序树_BinarySortTree
- SQL Date 函数
- JavaSE:二维数组的经典例题:打印杨辉三角的前十行