⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pacematrix.java

📁 Java 编写的多种数据挖掘算法 包括聚类、分类、预处理等
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* *    This program is free software; you can redistribute it and/or modify *    it under the terms of the GNU General Public License as published by *    the Free Software Foundation; either version 2 of the License, or (at *    your option) any later version. * *    This program is distributed in the hope that it will be useful, but *    WITHOUT ANY WARRANTY; without even the implied warranty of *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *    General Public License for more details. * *    You should have received a copy of the GNU General Public License *    along with this program; if not, write to the Free Software *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  *//* *    PaceMatrix.java *    Copyright (C) 2002 Yong Wang * */package weka.classifiers.functions.pace;import weka.core.matrix.DoubleVector;import weka.core.matrix.FlexibleDecimalFormat;import weka.core.matrix.IntVector;import weka.core.matrix.Matrix;import weka.core.matrix.Maths;import java.util.Random;import java.text.DecimalFormat;/** * Class for matrix manipulation used for pace regression. <p> * * REFERENCES <p> *  * Wang, Y. (2000). "A new approach to fitting linear models in high * dimensional spaces." PhD Thesis. Department of Computer Science, * University of Waikato, New Zealand. <p> *  * Wang, Y. and Witten, I. H. (2002). "Modeling for optimal probability * prediction." Proceedings of ICML'2002. Sydney. <p> * * @author Yong Wang (yongwang@cs.waikato.ac.nz) * @version $Revision: 1.3 $ */public class PaceMatrix   extends Matrix {    /** for serialization */  static final long serialVersionUID = 2699925616857843973L;      /* ------------------------     Constructors     * ------------------------ */    /** Construct an m-by-n PACE matrix of zeros.       @param m    Number of rows.      @param n    Number of colums.  */  public PaceMatrix( int m, int n ) {    super( m, n );  }  /** Construct an m-by-n constant PACE matrix.      @param m    Number of rows.      @param n    Number of colums.      @param s    Fill the matrix with this scalar value.  */  public PaceMatrix( int m, int n, double s ) {    super( m, n, s );  }      /** Construct a PACE matrix from a 2-D array.      @param A    Two-dimensional array of doubles.      @throws  IllegalArgumentException All rows must have the same length  */  public PaceMatrix( double[][] A ) {    super( A );  }  /** Construct a PACE matrix quickly without checking arguments.      @param A    Two-dimensional array of doubles.      @param m    Number of rows.      @param n    Number of colums.  */  public PaceMatrix( double[][] A, int m, int n ) {    super( A, m, n );  }      /** Construct a PaceMatrix from a one-dimensional packed array      @param vals One-dimensional array of doubles, packed by columns (ala Fortran).      @param m    Number of rows.      @throws  IllegalArgumentException Array length must be a multiple of m.  */  public PaceMatrix( double vals[], int m ) {    super( vals, m );  }      /** Construct a PaceMatrix with a single column from a DoubleVector       @param v    DoubleVector  */  public PaceMatrix( DoubleVector v ) {    this( v.size(), 1 );    setMatrix( 0, v.size()-1, 0, v );  }      /** Construct a PaceMatrix from a Matrix       @param X    Matrix   */  public PaceMatrix( Matrix X ) {    super( X.getRowDimension(), X.getColumnDimension() );    A = X.getArray();  }      /* ------------------------     Public Methods     * ------------------------ */  /** Set the row dimenion of the matrix   *  @param rowDimension the row dimension   */  public void setRowDimension( int rowDimension )   {    m = rowDimension;  }  /** Set the column dimenion of the matrix   *  @param columnDimension the column dimension   */  public void setColumnDimension( int columnDimension )   {    n = columnDimension;  }  /**    * Clone the PaceMatrix object.   *    * @return the clone   */  public Object clone () {    PaceMatrix X = new PaceMatrix(m,n);    double[][] C = X.getArray();    for (int i = 0; i < m; i++) {      for (int j = 0; j < n; j++) {	C[i][j] = A[i][j];      }    }    return (Object) X;  }      /** Add a value to an element and reset the element   *  @param i    the row number of the element   *  @param j    the column number of the element   *  @param s    the double value to be added with   */  public void setPlus(int i, int j, double s) {    A[i][j] += s;  }  /** Multiply a value with an element and reset the element   *  @param i    the row number of the element   *  @param j    the column number of the element   *  @param s    the double value to be multiplied with   */  public void setTimes(int i, int j, double s) {    A[i][j] *= s;  }  /** Set the submatrix A[i0:i1][j0:j1] with a same value    *  @param i0 the index of the first element of the column   *  @param i1 the index of the last element of the column   *  @param j0 the index of the first column   *  @param j1 the index of the last column   *  @param s the value to be set to   */  public void setMatrix( int i0, int i1, int j0, int j1, double s ) {    try {      for( int i = i0; i <= i1; i++ ) {	for( int j = j0; j <= j1; j++ ) {	  A[i][j] = s;	}      }    } catch( ArrayIndexOutOfBoundsException e ) {      throw new ArrayIndexOutOfBoundsException( "Index out of bounds" );    }  }    /** Set the submatrix A[i0:i1][j] with the values stored in a   *  DoubleVector   *  @param i0 the index of the first element of the column   *  @param i1 the index of the last element of the column   *  @param j  the index of the column   *  @param v the vector that stores the values*/  public void setMatrix( int i0, int i1, int j, DoubleVector v ) {    for( int i = i0; i <= i1; i++ ) {      A[i][j] = v.get(i-i0);    }  }  /** Set the whole matrix from a 1-D array    *  @param v    1-D array of doubles   *  @param columnFirst   Whether to fill the column first or the row.   *  @throws  ArrayIndexOutOfBoundsException Submatrix indices   */  public void setMatrix ( double[] v, boolean columnFirst ) {    try {      if( v.length != m * n ) 	throw new IllegalArgumentException("sizes not match.");      int i, j, count = 0;      if( columnFirst ) {	for( i = 0; i < m; i++ ) {	  for( j = 0; j < n; j++ ) {	    A[i][j] = v[count];	    count ++;	  }	}      }      else {	for( j = 0; j < n; j++ ) {	  for( i = 0; i < m; i++ ){	    A[i][j] = v[count];	    count ++;	  }	}      }    } catch( ArrayIndexOutOfBoundsException e ) {      throw new ArrayIndexOutOfBoundsException( "Submatrix indices" );    }  }  /** Returns the maximum absolute value of all elements       @return the maximum value  */  public double maxAbs () {    double ma = Math.abs(A[0][0]);    for (int j = 0; j < n; j++) {      for (int i = 0; i < m; i++) {	ma = Math.max(ma, Math.abs(A[i][j]));      }    }    return ma;  }  /** Returns the maximum absolute value of some elements of a column,      that is, the elements of A[i0:i1][j].      @param i0 the index of the first element of the column      @param i1 the index of the last element of the column      @param j  the index of the column      @return the maximum value */  public double maxAbs ( int i0, int i1, int j ) {    double m = Math.abs(A[i0][j]);    for (int i = i0+1; i <= i1; i++) {      m = Math.max(m, Math.abs(A[i][j]));    }    return m;  }  /** Returns the minimum absolute value of some elements of a column,      that is, the elements of A[i0:i1][j].      @param i0 the index of the first element of the column      @param i1 the index of the last element of the column      @param column the index of the column      @return the minimum value   */  public double minAbs ( int i0, int i1, int column ) {    double m = Math.abs(A[i0][column]);    for (int i = i0+1; i <= i1; i++) {      m = Math.min(m, Math.abs(A[i][column]));    }    return m;  }      /** Check if the matrix is empty   *   @return true if the matrix is empty   */  public boolean  isEmpty(){    if(m == 0 || n == 0) return true;    if(A == null) return true;    return false;  }      /** Return a DoubleVector that stores a column of the matrix    *  @param j the index of the column   *  @return the column   */  public DoubleVector  getColumn( int j ) {    DoubleVector v = new DoubleVector( m );    double [] a = v.getArray();    for(int i = 0; i < m; i++)      a[i] = A[i][j];    return v;  }  /** Return a DoubleVector that stores some elements of a column of the   *  matrix    *  @param i0 the index of the first element of the column   *  @param i1 the index of the last element of the column   *  @param j  the index of the column   *  @return the DoubleVector   */  public DoubleVector  getColumn( int i0, int i1, int j ) {    DoubleVector v = new DoubleVector( i1-i0+1 );    double [] a = v.getArray();    int count = 0;    for( int i = i0; i <= i1; i++ ) {      a[count] = A[i][j];      count++;    }    return v;  }      /** Multiplication between a row (or part of a row) of the first matrix   *  and a column (or part or a column) of the second matrix.   *  @param i the index of the row in the first matrix   *  @param j0 the index of the first column in the first matrix   *  @param j1 the index of the last column in the first matrix   *  @param B the second matrix   *  @param l the index of the column in the second matrix   *  @return the result of the multiplication   */  public double  times( int i, int j0, int j1, PaceMatrix B, int l ) {    double s = 0.0;    for(int j = j0; j <= j1; j++ ) {      s += A[i][j] * B.A[j][l];    }    return s;  }    /** Decimal format for converting a matrix into a string   *  @return the default decimal format   */  protected DecimalFormat []  format() {    return format(0, m-1, 0, n-1, 7, false );  }    /** Decimal format for converting a matrix into a string   *  @param digits the number of digits   *  @return the decimal format   */  protected DecimalFormat []  format( int digits ) {    return format(0, m-1, 0, n-1, digits, false);  }  /** Decimal format for converting a matrix into a string   *  @param digits the number of digits   *  @param trailing   *  @return the decimal format   */  protected DecimalFormat []  format( int digits, boolean trailing ) {    return format(0, m-1, 0, n-1, digits, trailing);  }    /** Decimal format for converting a matrix into a string   *  @param digits the number of digits   *  @param i0   *  @param i1   *  @param j   *  @param digits   *  @param trailing   *  @return the decimal format   */  protected DecimalFormat  format(int i0, int i1, int j, int digits, 				  boolean trailing) {    FlexibleDecimalFormat df = new FlexibleDecimalFormat(digits, trailing);    df.grouping( true );    for(int i = i0; i <= i1; i ++ )      df.update( A[i][j] );    return df;  }    /** Decimal format for converting a matrix into a string   *  @param digits the number of digits   *  @param i0   *  @param i1   *  @param j   *  @param trailing   *  @param digits   *  @return the decimal format   */  protected DecimalFormat []  format(int i0, int i1, int j0, int j1, 				     int digits, boolean trailing) {    DecimalFormat [] f = new DecimalFormat[j1-j0+1];    for( int j = j0; j <= j1; j++ ) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -