[
https://issues.apache.org/jira/browse/MATH-230?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ismael Juma updated MATH-230:
-----------------------------
Attachment: math-230.diff
This attachment includes:
- SparseRealMatrixImpl from Sujit (renamed to SparseRealMatrix).
- Changes to SparseRealMatrix to use AbstractRealMatrix.
- Changes to SparseRealMatrixTest to use LUSolver.
- OpenIntToDoubleHashMap as a static inner class of SparseRealMatrix. The
former is an open addressed hash map that does not create any wrapper objects.
It uses a int[], double[] and byte[] to store the entries. The hashing scheme
is based on Python's dict (a highly optimised hash map written in C because the
runtime uses it for almost everything).
- OpenIntToDoubleHashMapTest.
- Changes to SparseRealMatrix to use OpenIntToDoubleHashMap.
- MatrixUtils.createSparseRealMatrix from Sujit's patch.
- Changes to a couple of check methods in AbstractRealMatrix so that they're
protected final instead of private.
There are a few things from Sujit's patch that this one does not include:
- RealMatrixImpl changes. I don't think these are necessary anymore.
- MatrixUtils.getRealMatrixInstance (not sure what this is for).
- LUDecomposition changes.
- In SparseRealMatrixImpl.setSubMatrix, there were some additional checks if
entries.size() == 0. Are those still needed?
Because of the missing LUDecomposition changes, some tests in
SparseRealMatrixTest are failing. I am going to be away for a few days, so if
Sujit or anyone else wants to update LUDecomposition to work with any matrix
type, that would be good. On the other hand, perhaps those changes could be in
a separate bug since adding the SparseRealMatrix is a decent amount of work on
its own.
> Implement Sparse Matrix Support
> -------------------------------
>
> Key: MATH-230
> URL: https://issues.apache.org/jira/browse/MATH-230
> Project: Commons Math
> Issue Type: Improvement
> Affects Versions: 2.0
> Environment: N/A
> Reporter: Sujit Pal
> Assignee: Luc Maisonobe
> Priority: Minor
> Fix For: 2.0
>
> Attachments: math-230.diff, patch.txt,
> RealMatrixImplPerformanceTest.java, SparseRealMatrixImpl.java,
> SparseRealMatrixImplTest.java
>
>
> I needed a way to deal with large sparse matrices using commons-math
> RealMatrix, so I implemented it. The SparseRealMatrixImpl is a subclass of
> RealMatrixImpl, and the backing data structure is a Map<Point,Double>, where
> Point is a struct like inner-class which exposes two int parameters row and
> column. I had to make some changes to the existing components to keep the
> code for SparseRealMatrixImpl clean. Here are the details.
> 1) RealMatrix.java:
> - added a new method setEntry(int, int, double) to set data into a matrix
> 2) RealMatrixImpl.java:
> - changed all internal calls to data[i][j] to getEntry(i,j).
> - for some methods such as add(), subtract(), premultiply(), etc, there
> was code that checked for ClassCastException and had two versions,
> one for a generic RealMatrix and one for a RealMatrixImpl. This has
> been changed to have only one that operates on a RealMatrix. The
> result is something like auto-type casting. So if:
> RealMatrixImpl.add(RealMatrix) returns a RealMatrixImpl
> SparseRealMatrixImpl.add(RealMatrix) returns a SparseRealMatrixImpl
> 3) SparseRealMatrixImpl added as a subclass of RealMatrixImpl.
> 4) LUDecompositionImpl changed to use a clone of the passed in RealMatrix
> instead of its data[][] block, and now it uses clone.getEntry(row,col)
> calls instead of data[row][col] calls.
> 5) LUDecompositionImpl returned RealMatrixImpl for getL(), getU(), getP()
> and solve(). It now returns the same RealMatrix impl that is passed
> in through its constructor for these methods.
> 6) New test for SparseRealMatrixImpl, mimics the tests in RealMatrixImplTest,
> 7) New static method to create SparseRealMatrixImpl out of a double[][] in
> MatrixUtils.createSparseRealMatrix().
> but using SparseRealMatrixImpl.
> 8) Verified that all JUnit tests pass.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.