commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kim van der Linde <...@kimvdlinde.com>
Subject Re: [math] RC2 Release Plan
Date Mon, 04 Oct 2004 01:03:10 GMT
Hi Phil,

As I do not have any CVS set up, so I do it this way:

> 4) Add the following new methods to both RealMatrix and BigMatrix 
> interfaces:
> RealMatrix getSubMatrix (int startRow, int endRow, int startColumn,
> int endColumn)
> RealMatrix getSubMatrix (int[] rows, int[] columns)
> RealMatrix getRowMatrix(int row)
> RealMatrix getColumnMatrix(int row)
> RealMatrix createRowMatrix(double[] row)
> RealMatrix createColumnMatrix(double[] column)

/**
  * Get a submatrix. Rows and columns are indicated
  * counting from 0 to n-1.
  *
  * @param startRow Initial row index
  * @param endRow Final row index
  * @param startColumn Initial column index
  * @param endColumn Final column index
  * @return The subMatrix containing the data of the
  *         specified rows and columns
  * @exception MatrixIndexException matrix dimension
  *                mismatch
  */
public RealMatrix getSubMatrix(int startRow, int endRow, int startColumn,
			int endColumn) throws MatrixIndexException
{
   RealMatrix subMatrix = new RealMatrix(endRow - startRow + 1,
                                    endColumn - startColumn + 1);
   double[][] subMatrixData = subMatrix.getDataRef();
   try
   {
     for (int i = startRow; i <= endRow; i++)
     {
        for (int j = startColumn; j <= endColumn; j++)
        {
          subMatrixData[i - startRow][j - startColumn] = data[i][j];
        }
     }
   }
   catch (ArrayIndexOutOfBoundsException e)
   {
     throw new MatrixIndexException("matrix dimension mismatch");
   }
   return subMatrix;
}

/**
  * Get a submatrix. Rows and columns are indicated
  * counting from 0 to n-1.
  *
  * @param rows Array of row indices.
  * @param columns Array of column indices.
  * @return The subMatrix containing the data of the
  *         specified rows and columns
  * @exception MatrixIndexException matrix dimension
  *                mismatch
  */
public RealMatrix getSubMatrix(int[] selectedRows, int[] selectedColumns)
			throws MatrixIndexException
{
   RealMatrix subMatrix = new RealMatrix(selectedRows.length,
				selectedColumns.length);
   double[][] subMatrixData = subMatrix.getDataRef();
   try
   {
     for (int i = 0; i < selectedRows.length; i++)
     {
        for (int j = 0; j < selectedColumns.length; j++)
        {
           subMatrixData[i][j] = data[selectedRows[i]][selectedColumns[j]];
        }
     }
   }
   catch (ArrayIndexOutOfBoundsException e)
   {
     throw new MatrixIndexException("matrix dimension mismatch");
   }
   return subMatrix;
}

/**
  * Returns the entries in row number <code>row</code>
  * as a Matrix object.
  *
  * @param row the row to be fetched
  * @return RealMatrix with only one row
  * @throws MatrixIndexException if the specified row is
  *             greater than the number of rows in this
  *             matrix
  */
public Matrix getRowMatrix(int row) throws MatrixIndexException
{
   if (!isValidCoordinate(row, 0)) { throw new MatrixIndexException(
				"illegal row argument"); }
   double[][] out = new double[1][columns];
   for (int y = 0; y < columns; y++)
   {
     out[0][y] = data[row][y];
   }
   return new RealMatrix (out);
}

/**
  * Returns the entries in column number <code>col</code>
  * as a RealMatrix object.
  *
  * @param col column to fetch
  * @return RealMatrix with only one column
  * @throws MatrixIndexException if the specified column
  *             is greater than the number of columns in
  *             this matrix
  */
public RealMatrix getColumnMatrix(int col) throws MatrixIndexException
{
   if (!isValidCoordinate(0, col)) { throw new MatrixIndexException(
				"illegal row argument"); }
		
   double[][] out = new double[rows][1];
   for (int y = 0; y < rows; y++)
   {
     out[y][0] = data[y][col];
   }
   return new RealMatrix (out);
}

I do not have ready to use code for the last two methods.

I might have missed to add some 'Real's before the Matrix names....

Cheers,

Kim

-- 
http://www.kimvdlinde.com

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message