提示:您可在线编辑运行本教程的实例 - 运行实例,去试试!
重新规范化数组,使其L2范数为1(直至计算错误)。
//package com.nowjava; /* 来 自* NowJava.com */ public class Main { public static void main(String[] argv) throws Exception { double[] v = new double[] { 34.45, 35.45, 36.67, 37.78, 37.0000, 37.1234, 67.2344, 68.34534, 69.87700 }; System.out.println(java.util.Arrays.toString(normalize(v))); } /** * Renormalizes the array so that its L2 norm is 1 * (up to computational errors). */ public static double[] normalize(double[] v) { return (scalarMultiply(1.0 / norm(v), v)); } /** * Returns a comma delimited string representing the value of the array. */ public static String toString(double[] array) { StringBuffer buf = new StringBuffer(array.length); int i; /* 来 自* N o w J a v a . c o m - 时 代 Java */ for (i = 0; i < array.length - 1; i++) { buf.append(array[i]); buf.append(','); } buf.append(array[i]); return buf.toString(); } /** * Returns a comma delimited string representing the value of the array. */ public static String toString(double[][] array) { StringBuffer buf = new StringBuffer(); for (int k = 0; k < array.length; k++) { buf.append(toString(array[k])); buf.append(System.getProperty("line.separator")); } return buf.toString(); } /** * Returns a comma delimited string representing the value of the array. */ public static String toString(int[] array) { StringBuffer buf = new StringBuffer(array.length); int i; for (i = 0; i < array.length - 1; i++) { buf.append(array[i]); buf.append(','); } buf.append(array[i]); return buf.toString(); } /** * Returns a comma delimited string representing the value of the array. */ public static String toString(int[][] array) { StringBuffer buf = new StringBuffer(); for (int k = 0; k < array.length; k++) { buf.append(toString(array[k])); buf.append(System.getProperty("line.separator")); } return buf.toString(); } /** * Multiplies every component of an array by a scalar. */ public static double[] scalarMultiply(double a, double[] v) { double[] ans = new double[v.length]; for (int k = 0; k < v.length; k++) { ans[k] = a * v[k]; } return (ans); } /** * Multiplies every component of an array by a scalar. */ public static double[] scalarMultiply(double a, int[] v) { double[] ans = new double[v.length]; for (int k = 0; k < v.length; k++) { ans[k] = v[k] * a; } return (ans); } /** * Computes the L2 norm of an array (Euclidean norm or "length"). */ public static double norm(double[] data) { return (Math.sqrt(sumSquares(data))); } /** * Computes the L2 norm of an array (Euclidean norm or "length"). */ public static double norm(int[] data) { return (Math.sqrt(sumSquares(data))); } /** * Sums the squares of all components; * also called the energy of the array. */ public static double sumSquares(double[] data) { double ans = 0.0; for (int k = 0; k < data.length; k++) { ans += data[k] * data[k]; } return (ans); } /** * Sums the squares of all components; * also called the energy of the array. */ public static double sumSquares(double[][] data) { double ans = 0.0; for (int k = 0; k < data.length; k++) { for (int l = 0; l < data[k].length; l++) { ans += data[k][l] * data[k][l]; } } return (