[ 
https://issues.apache.org/jira/browse/MATH-312?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Phil Steitz reopened MATH-312:
------------------------------



Still TODO:
1) add unit tests
2) remove *mapTo and *mapToSelf from OpenMapRealVector
3) fix javadocs
4) remove support for non-zero default values in OpenMapRealVector 


> RealVector interface could use some iterators (dense and sparse) and generic 
> map() and collect() methods.
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: MATH-312
>                 URL: https://issues.apache.org/jira/browse/MATH-312
>             Project: Commons Math
>          Issue Type: New Feature
>    Affects Versions: 2.0
>         Environment: all
>            Reporter: Jake Mannix
>             Fix For: 2.1
>
>         Attachments: MATH-312.patch, MATH-312.patch
>
>
> As discussed on the [math] list, there are other projects out there which 
> would love to get a chance to standardize on using commons-math for things 
> like linear algebra primitives, as it would build a common base to build 
> upon.  But to do that, some well-known and used techniques for dealing with 
> vectors, for one thing, are missing.  Most glaringly is the treatment of 
> sparse vectors: giving no Iterator for non-default values means external 
> clients lose the advantage of sparseness - only internal methods can skip 
> around.  
> Extending the RealVector interface with sparse (and dense) iterator methods 
> would fix this: 
> {code}
>   double getDefaultValue();
>   Iterator<RealVector.Entry> iterator();
>   Iterator<RealVector.Entry> nonDefaultIterator();
> {code} 
> but there is another way to deal with vector data as well: instead of passing 
> iterators around, and worrying about all the lovely ConcurrentModification 
> and unsupported "remove" methods (which aren't the end of the world), we can 
> instead expose generic map functions:
> {code}
>   RealVector map(UnivariateRealFunction f);
>   RealVector mapToSelf(UnivariateRealFunction f);
> {code}
> where RealVector mapToSelf(UnivariateRealFunction), which applies the 
> function to the vector's entries (checking whether the function preserves the 
> default value up front allows it to chose between the sparse or dense 
> iterator), and map just applies mapToSelf to a copy.
> This doesn't exhaust all possible places where Iterators could be used 
> helpfully (there's also combining two vectors together via a 
> {code}map(BinaryRealFunction, RealVector other){code} which could be 
> specialized nonlinear forms of addition or subtraction, and {code}double 
> collect(UnivariateRealFunction, BinaryRealFunction){code} which uses the 
> iterates over all of the entries, applying the first unary function to each 
> entry, and then applying the binary function to combine this value with the 
> previous accumulated value - with "pow(2)", and "+" as the two functions, you 
> get L2 norm, with "abs()" and "+", you get L1 norm, etc...)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to