提示:您可在线编辑运行本教程的实例 - 运行实例,去试试!
计算两个数组之间的(线性)相关性。
//package com.nowjava;//n o w j a v a . c o m - 时 代 Java public class Main { public static void main(String[] argv) throws Exception { double[] v1 = new double[] { 34.45, 35.45, 36.67, 37.78, 37.0000, 37.1234, 67.2344, 68.34534, 69.87700 }; double[] v2 = new double[] { 34.45, 35.45, 36.67, 37.78, 37.0000, 37.1234, 67.2344, 68.34534, 69.87700 }; System.out.println(correlation(v1, v2)); } /** * Computes the (linear) correlation between two arrays. * Squaring this result and multiply by 100 gives you * the percentage of correlation. */ public static double correlation(double[] v1, double[] v2) { double denom = Math.sqrt(variance(v1) * variance(v2)); if (denom != 0) return (covariance(v1, v2) / denom); else { if ((variance(v1) == 0) && (variance(v2) == 0)) return (1.0); else return (0.0); // impossible to correlate a null signal with another/**来自 N o w J a v a . c o m - 时代Java**/ } } /** * Computes the (linear) correlation between two arrays. * Squaring this result and multiply by 100 gives you * the percentage of correlation. */ public static double correlation(int[] v1, int[] v2) { double denom = Math.sqrt(variance(v1) * variance(v2)); if (denom != 0) return (covariance(v1, v2) / denom); else { if ((variance(v1) == 0) && (variance(v2) == 0)) return (1.0); else return (0.0); // impossible to correlate a null signal with another } } /** * Computes the (bias-corrected sample) variance. */ public static double variance(double[] v) { if (v.length > 1) { final double m = mean(v); double ans = 0.0; for (int i = 0; i < v.length; i++) ans += (v[i] - m) * (v[i] - m); return ans / (v.length - 1); } else throw new IllegalArgumentException( "Array length must be of 2 or greater."); } /** * Computes the (bias-corrected sample) variance. */ public static double variance(int[] v) { if (v.length > 1) { final double m = mean(v); double ans = 0.0; for (int i = 0; i < v.length; i++) ans += (v[i] - m) * (v[i] - m); return ans / (v.length - 1); } else throw new IllegalArgumentException( "Array length must be of 2 or greater."); } /** * Computes the covariance. */ public static double covariance(double[] v1, double[] v2) { if (v1.length != v2.length) throw new IllegalArgumentException( "Arrays must have the same length : " + v1.length + ", " + v2.length); final double m1 = mean(v1); final double m2 = mean(v2); double ans = 0.0; for (int i = 0; i < v1.length; i++) ans += (v1[i] - m1) * (v2[i] - m2); return ans / (v1.length - 1); } /** * Computes the covariance. */ public static double covariance(int[] v1, int[] v2) { if (v1.length != v2.length) throw new IllegalArgumentException( "Arrays must have the same length : " + v1.length + ", " + v2.length); final double m1 = mean(v1); final double m2 = mean(v2); double ans = 0.0; for (int i = 0; i < v1.length; i++) ans += (v1[i] - m1) * (v2[i] - m2); return ans / (v1.length - 1); } /** * Computes the mean. */ public static double mean(double[] v) { if (v.length == 0) throw new IllegalArgumentException( "Nothing to compute! The array must have at least one element."); return (mass(v) / (double) v.length); } /** * Computes the mean. */ public static double mean(int[] v) {