集册 Java实例教程 重新规范化数组,使其L2范数为1(直至计算错误)。

重新规范化数组,使其L2范数为1(直至计算错误)。

欢马劈雪     最近更新时间:2020-01-02 10:19:05

451
提示:您可在线编辑运行本教程的实例 - 运行实例,去试试!
重新规范化数组,使其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 (
展开阅读全文