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

📄 matrix.java

📁 wekaUT是 university texas austin 开发的基于weka的半指导学习(semi supervised learning)的分类器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
      }      return X;   }   /** One norm   @return    maximum column sum.   */   public double norm1 () {      double f = 0;      for (int j = 0; j < n; j++) {         double s = 0;         for (int i = 0; i < m; i++) {            s += Math.abs(A[i][j]);         }         f = Math.max(f,s);      }      return f;   }   /** Infinity norm   @return    maximum row sum.   */   public double normInf () {      double f = 0;      for (int i = 0; i < m; i++) {         double s = 0;         for (int j = 0; j < n; j++) {            s += Math.abs(A[i][j]);         }         f = Math.max(f,s);      }      return f;   }   /** Frobenius norm   @return    sqrt of sum of squares of all elements.   */   public double normF () {      double f = 0;      for (int i = 0; i < m; i++) {         for (int j = 0; j < n; j++) {            f = Maths.hypot(f,A[i][j]);         }      }      return f;   }   /**  Unary minus   @return    -A   */   public Matrix uminus () {      Matrix X = new Matrix(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 X;   }   /** C = A + B   @param B    another matrix   @return     A + B   */   public Matrix plus (Matrix B) {      checkMatrixDimensions(B);      Matrix X = new Matrix(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] + B.A[i][j];         }      }      return X;   }   /** A = A + B   @param B    another matrix   @return     A + B   */   public Matrix plusEquals (Matrix B) {      checkMatrixDimensions(B);      for (int i = 0; i < m; i++) {         for (int j = 0; j < n; j++) {            A[i][j] = A[i][j] + B.A[i][j];         }      }      return this;   }   /** C = A - B   @param B    another matrix   @return     A - B   */   public Matrix minus (Matrix B) {      checkMatrixDimensions(B);      Matrix X = new Matrix(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] - B.A[i][j];         }      }      return X;   }   /** A = A - B   @param B    another matrix   @return     A - B   */   public Matrix minusEquals (Matrix B) {      checkMatrixDimensions(B);      for (int i = 0; i < m; i++) {         for (int j = 0; j < n; j++) {            A[i][j] = A[i][j] - B.A[i][j];         }      }      return this;   }   /** Element-by-element multiplication, C = A.*B   @param B    another matrix   @return     A.*B   */   public Matrix arrayTimes (Matrix B) {      checkMatrixDimensions(B);      Matrix X = new Matrix(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] * B.A[i][j];         }      }      return X;   }   /** Element-by-element multiplication in place, A = A.*B   @param B    another matrix   @return     A.*B   */   public Matrix arrayTimesEquals (Matrix B) {      checkMatrixDimensions(B);      for (int i = 0; i < m; i++) {         for (int j = 0; j < n; j++) {            A[i][j] = A[i][j] * B.A[i][j];         }      }      return this;   }   /** Element-by-element right division, C = A./B   @param B    another matrix   @return     A./B   */   public Matrix arrayRightDivide (Matrix B) {      checkMatrixDimensions(B);      Matrix X = new Matrix(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] / B.A[i][j];         }      }      return X;   }   /** Element-by-element right division in place, A = A./B   @param B    another matrix   @return     A./B   */   public Matrix arrayRightDivideEquals (Matrix B) {      checkMatrixDimensions(B);      for (int i = 0; i < m; i++) {         for (int j = 0; j < n; j++) {            A[i][j] = A[i][j] / B.A[i][j];         }      }      return this;   }   /** Element-by-element left division, C = A.\B   @param B    another matrix   @return     A.\B   */   public Matrix arrayLeftDivide (Matrix B) {      checkMatrixDimensions(B);      Matrix X = new Matrix(m,n);      double[][] C = X.getArray();      for (int i = 0; i < m; i++) {         for (int j = 0; j < n; j++) {            C[i][j] = B.A[i][j] / A[i][j];         }      }      return X;   }   /** Element-by-element left division in place, A = A.\B   @param B    another matrix   @return     A.\B   */   public Matrix arrayLeftDivideEquals (Matrix B) {      checkMatrixDimensions(B);      for (int i = 0; i < m; i++) {         for (int j = 0; j < n; j++) {            A[i][j] = B.A[i][j] / A[i][j];         }      }      return this;   }   /** Multiply a matrix by a scalar, C = s*A   @param s    scalar   @return     s*A   */   public Matrix times (double s) {      Matrix X = new Matrix(m,n);      double[][] C = X.getArray();      for (int i = 0; i < m; i++) {         for (int j = 0; j < n; j++) {            C[i][j] = s*A[i][j];         }      }      return X;   }   /** Multiply a matrix by a scalar in place, A = s*A   @param s    scalar   @return     replace A by s*A   */   public Matrix timesEquals (double s) {      for (int i = 0; i < m; i++) {         for (int j = 0; j < n; j++) {            A[i][j] = s*A[i][j];         }      }      return this;   }   /** Linear algebraic matrix multiplication, A * B   @param B    another matrix   @return     Matrix product, A * B   @exception  IllegalArgumentException Matrix inner dimensions must agree.   */   public Matrix times (Matrix B) {      if (B.m != n) {         throw new IllegalArgumentException("Matrix inner dimensions must agree.");      }      Matrix X = new Matrix(m,B.n);      double[][] C = X.getArray();      double[] Bcolj = new double[n];      for (int j = 0; j < B.n; j++) {         for (int k = 0; k < n; k++) {            Bcolj[k] = B.A[k][j];         }         for (int i = 0; i < m; i++) {            double[] Arowi = A[i];            double s = 0;            for (int k = 0; k < n; k++) {               s += Arowi[k]*Bcolj[k];            }            C[i][j] = s;         }      }      return X;   }   /** Matrix trace.   @return     sum of the diagonal elements.   */   public double trace () {      double t = 0;      for (int i = 0; i < Math.min(m,n); i++) {         t += A[i][i];      }      return t;   }   /** Generate matrix with random elements   @param m    Number of rows.   @param n    Number of colums.   @return     An m-by-n matrix with uniformly distributed random elements.   */   public static Matrix random( int m, int n ) {      Matrix A = new Matrix(m,n);      double[][] X = A.getArray();      for (int i = 0; i < m; i++) {         for (int j = 0; j < n; j++) {            X[i][j] = Math.random();         }      }      return A;   }   /** Generate identity matrix   @param m    Number of rows.   @param n    Number of colums.   @return     An m-by-n matrix with ones on the diagonal and zeros elsewhere.   */   public static Matrix identity (int m, int n) {      Matrix A = new Matrix(m,n);      double[][] X = A.getArray();      for (int i = 0; i < m; i++) {         for (int j = 0; j < n; j++) {            X[i][j] = (i == j ? 1.0 : 0.0);         }      }      return A;   }   /** Print the matrix to stdout.   Line the elements up in columns     * with a Fortran-like 'Fw.d' style format.   @param w    Column width.   @param d    Number of digits after the decimal.   */   public void print (int w, int d) {      print(new PrintWriter(System.out,true),w,d); }   /** Print the matrix to the output stream.   Line the elements up in     * columns with a Fortran-like 'Fw.d' style format.   @param output Output stream.   @param w      Column width.   @param d      Number of digits after the decimal.   */   public void print (PrintWriter output, int w, int d) {      DecimalFormat format = new DecimalFormat();      format.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US));      format.setMinimumIntegerDigits(1);      format.setMaximumFractionDigits(d);      format.setMinimumFractionDigits(d);      format.setGroupingUsed(false);      print(output,format,w+2);   }   /** Print the matrix to stdout.  Line the elements up in columns.     * Use the format object, and right justify within columns of width     * characters.     * Note that is the matrix is to be read back in, you probably will want     * to use a NumberFormat that is set to US Locale.   @param format A  Formatting object for individual elements.   @param width     Field width for each column.   @see java.text.DecimalFormat#setDecimalFormatSymbols   */   public void print (NumberFormat format, int width) {      print(new PrintWriter(System.out,true),format,width); }   // DecimalFormat is a little disappointing coming from Fortran or C's printf.   // Since it doesn't pad on the left, the elements will come out different   // widths.  Consequently, we'll pass the desired column width in as an   // argument and do the extra padding ourselves.   /** Print the matrix to the output stream.  Line the elements up in columns.     * Use the format object, and right justify within columns of width     * characters.     * Note that is the matrix is to be read back in, you probably will want     * to use a NumberFormat that is set to US Locale.   @param output the output stream.   @param format A formatting object to format the matrix elements    @param width  Column width.   @see java.text.DecimalFormat#setDecimalFormatSymbols   */   public void print (PrintWriter output, NumberFormat format, int width) {      output.println();  // start on new line.      for (int i = 0; i < m; i++) {         for (int j = 0; j < n; j++) {            String s = format.format(A[i][j]); // format the number            int padding = Math.max(1,width-s.length()); // At _least_ 1 space            for (int k = 0; k < padding; k++)               output.print(' ');            output.print(s);         }         output.println();      }      output.println();   // end with blank line.   }   /** Read a matrix from a stream.  The format is the same the print method,     * so printed matrices can be read back in (provided they were printed using     * US Locale).  Elements are separated by     * whitespace, all the elements for each row appear on a single line,     * the last row is followed by a blank line.   @param input the input stream.   */   public static Matrix read (BufferedReader input) throws java.io.IOException {      StreamTokenizer tokenizer= new StreamTokenizer(input);      // Although StreamTokenizer will parse numbers, it doesn't recognize      // scientific notation (E or D); however, Double.valueOf does.      // The strategy here is to disable StreamTokenizer's number parsing.      // We'll only get whitespace delimited words, EOL's and EOF's.      // These words should all be numbers, for Double.valueOf to parse.      tokenizer.resetSyntax();      tokenizer.wordChars(0,255);      tokenizer.whitespaceChars(0, ' ');      tokenizer.eolIsSignificant(true);      java.util.Vector v = new java.util.Vector();      // Ignore initial empty lines      while (tokenizer.nextToken() == StreamTokenizer.TT_EOL);      if (tokenizer.ttype == StreamTokenizer.TT_EOF)	throw new java.io.IOException("Unexpected EOF on matrix read.");      do {         v.addElement(Double.valueOf(tokenizer.sval)); // Read & store 1st row.      } while (tokenizer.nextToken() == StreamTokenizer.TT_WORD);      int n = v.size();  // Now we've got the number of columns!      double row[] = new double[n];      for (int j=0; j<n; j++)  // extract the elements of the 1st row.         row[j]=((Double)v.elementAt(j)).doubleValue();      v.removeAllElements();      v.addElement(row);  // Start storing rows instead of columns.      while (tokenizer.nextToken() == StreamTokenizer.TT_WORD) {         // While non-empty lines         v.addElement(row = new double[n]);         int j = 0;         do {            if (j >= n) throw new java.io.IOException               ("Row " + v.size() + " is too long.");            row[j++] = Double.valueOf(tokenizer.sval).doubleValue();         } while (tokenizer.nextToken() == StreamTokenizer.TT_WORD);         if (j < n) throw new java.io.IOException            ("Row " + v.size() + " is too short.");      }      int m = v.size();  // Now we've got the number of rows.      double[][] A = new double[m][];      v.copyInto(A);  // copy the rows out of the vector      return new Matrix(A);   }/* ------------------------   Private Methods * ------------------------ */   /** Check if size(A) == size(B) **/   private void checkMatrixDimensions (Matrix B) {      if (B.m != m || B.n != n) {         throw new IllegalArgumentException("Matrix dimensions must agree.");      }   }}

⌨️ 快捷键说明

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