2010/1/29 Luc Maisonobe <luc.maison...@free.fr>:
> Bill Barker a écrit :
>>
>>
>> --------------------------------------------------
>> From: "Luc Maisonobe" <luc.maison...@free.fr>
>> Sent: Thursday, January 28, 2010 12:14 PM
>> To: "Commons Developers List" <dev@commons.apache.org>
>> Subject: Re: svn commit: r904231 - in
>> /commons/proper/math/trunk/src:main/java/org/apache/commons/math/linear/AbstractRealVector.javasite/xdoc/changes.xml
>> test/java/org/apache/commons/math/linear/ArrayRealVectorTest.java
>>
>>> Mikkel Meyer Andersen a écrit :
>>>> Hi.
>>>>
>>>> Thanks!
>>>>
>>>> Why use an iterator instead of just a simple for-loop? And what about
>>>> saving
>>>> the values until the vector invalidates - I see pros and cons for both
>>>> approaches, so it's more to hear what your thoughts were?
>>>
>>> It is because there already are several implementations of the class and
>>> they may use different strategies to access elements. Such iterators
>>> have been introduced by recent changes so I thought it was better to
>>> stick with them now.
>>>
>>
>> +1
>> There is a case for using the sparseIterator, but that probably makes
>> the methods overly complicated (since zero values have to be handled
>> specially).
>
> I did hesitate to add this. I thought adding special getSparseMinIndex
> and so on, that would explicitely ignore non-zeros. We can add them too
> if you think ignoring zeros is the right thing to do. In that case, we
> simply copy the methods and change iterator into sparse iterator, that's
> all.
>
> Luc
>
>>
>>> As for saving the values, we cannot be sure when the vector changes.
>>> Users may do this several ways and we simply did not implement any
>>> control on that.
>>>
>>> Luc
>>>
>>>>
>>>> Cheers, Mikkel.
>>>>
>>>> On 28/01/2010 8:42 PM, <l...@apache.org> wrote:
>>>>
>>>> Author: luc
>>>> Date: Thu Jan 28 19:42:31 2010
>>>> New Revision: 904231
>>>>
>>>> URL: http://svn.apache.org/viewvc?rev=904231&view=rev
>>>> Log:
>>>> added min/max getters for real vectors
>>>> For compatibility reasons, these methods have been put in the topmost
>>>> abstract class but not in the interface yet. It could be pushed to the
>>>> interface when next major version will be released.
>>>> JIRA: MATH-334
>>>>
>>>> Modified:
>>>>
>>>>
>>>> commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/AbstractRealVector.java
>>>>
>>>>    commons/proper/math/trunk/src/site/xdoc/changes.xml
>>>>
>>>>
>>>> commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/ArrayRealVectorTest.java
>>>>
>>>>
>>>> Modified:
>>>> commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/AbstractRealVector.java
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/AbstractRealVector.java?rev=904231&r1=904230&r2=904231&view=diff
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/AbstractRealVector.java
>>>>
>>>> (original)
>>>> +++
>>>> commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/AbstractRealVector.java
>>>>
>>>> Thu Jan 28 19:42:31 2010
>>>> @@ -292,6 +292,58 @@
>>>>         return d;
>>>>     }
>>>>
>>>> +    /** Get the index of the minimum entry.
>>>> +     * @return index of the minimum entry or -1 if vector length is 0
>>>> +     * or all entries are NaN
>>>> +     */
>>>> +    public int getMinIndex() {
>>>> +        int minIndex    = -1;
>>>> +        double minValue = Double.POSITIVE_INFINITY;
>>>> +        Iterator<Entry> iterator = iterator();
>>>> +        while (iterator.hasNext()) {
>>>> +            final Entry entry = iterator.next();
>>>> +            if (entry.getValue() <= minValue) {
>>>> +                minIndex = entry.getIndex();
>>>> +                minValue = entry.getValue();
>>>> +            }
>>>> +        }
>>>> +        return minIndex;
>>>> +    }
>>>> +
>>>> +    /** Get the value of the minimum entry.
>>>> +     * @return value of the minimum entry or NaN if all entries are NaN
>>>> +     */
>>>> +    public double getMinValue() {
>>>> +        final int minIndex = getMinIndex();
>>>> +        return minIndex < 0 ? Double.NaN : getEntry(minIndex);
>>>> +    }
>>>> +
>>>> +    /** Get the index of the maximum entry.
>>>> +     * @return index of the maximum entry or -1 if vector length is 0
>>>> +     * or all entries are NaN
>>>> +     */
>>>> +    public int getMaxIndex() {
>>>> +        int maxIndex    = -1;
>>>> +        double maxValue = Double.NEGATIVE_INFINITY;
>>>> +        Iterator<Entry> iterator = iterator();
>>>> +        while (iterator.hasNext()) {
>>>> +            final Entry entry = iterator.next();
>>>> +            if (entry.getValue() >= maxValue) {
>>>> +                maxIndex = entry.getIndex();
>>>> +                maxValue = entry.getValue();
>>>> +            }
>>>> +        }
>>>> +        return maxIndex;
>>>> +    }
>>>> +
>>>> +    /** Get the value of the maximum entry.
>>>> +     * @return value of the maximum entry or NaN if all entries are NaN
>>>> +     */
>>>> +    public double getMaxValue() {
>>>> +        final int maxIndex = getMaxIndex();
>>>> +        return maxIndex < 0 ? Double.NaN : getEntry(maxIndex);
>>>> +    }
>>>> +
>>>>     /** {...@inheritdoc} */
>>>>     public RealVector mapAbs() {
>>>>         return copy().mapAbsToSelf();
>>>>
>>>> Modified: commons/proper/math/trunk/src/site/xdoc/changes.xml
>>>> URL:
>>>> http://svn.apache.org/viewvc/commons/proper/math/trunk/src/site/xdoc/changes.xml?rev=904231&r1=904230&r2=904231&view=diff
>>>>
>>>> ==============================================================================
>>>>
>>>> --- commons/proper/math/trunk/src/site/xdoc/changes.xml (original)
>>>> +++ commons/proper/math/trunk/src/site/xdoc/changes.xml Thu Jan 28
>>>> 19:42:31
>>>> 2010
>>>> @@ -39,6 +39,10 @@
>>>>   </properties>
>>>>   <body>
>>>>     <release version="2.1" date="TBD" description="TBD">
>>>> +      <action dev="luc" type="add" issue="MATH-334" >
>>>> +        Added min/max getters for real vectors (not yet in the
>>>> RealVector
>>>> interface for
>>>> +        compatibility purposes, but in the AbstractRealVector abstract
>>>> class).
>>>> +      </action>
>>>>       <action dev="luc" type="fix" issue="MATH-338" due-to="Vincent
>>>> Morand">
>>>>         Fixed automatic step initialization in embedded Runge-Kutta
>>>> integrators.
>>>>         The relative tolerance setting was never used, only the absolute
>>>> tolerance
>>>>
>>>> Modified:
>>>> commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/ArrayRealVectorTest.java
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/ArrayRealVectorTest.java?rev=904231&r1=904230&r2=904231&view=diff
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/ArrayRealVectorTest.java
>>>>
>>>> (original)
>>>> +++
>>>> commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/ArrayRealVectorTest.java
>>>>
>>>> Thu Jan 28 19:42:31 2010
>>>> @@ -1308,6 +1308,30 @@
>>>>     }
>>>>
>>>>
>>>> +    public void testMinMax()  {
>>>> +        ArrayRealVector v1 = new ArrayRealVector(new double[] { 0,
>>>> -6, 4,
>>>> 12, 7 });
>>>> +        assertEquals(1,  v1.getMinIndex());
>>>> +        assertEquals(-6, v1.getMinValue(), 1.0e-12);
>>>> +        assertEquals(3,  v1.getMaxIndex());
>>>> +        assertEquals(12, v1.getMaxValue(), 1.0e-12);
>>>> +        ArrayRealVector v2 = new ArrayRealVector(new double[] {
>>>> Double.NaN,
>>>> 3, Double.NaN, -2 });
>>>> +        assertEquals(3,  v2.getMinIndex());
>>>> +        assertEquals(-2, v2.getMinValue(), 1.0e-12);
>>>> +        assertEquals(1,  v2.getMaxIndex());
>>>> +        assertEquals(3, v2.getMaxValue(), 1.0e-12);
>>>> +        ArrayRealVector v3 = new ArrayRealVector(new double[] {
>>>> Double.NaN,
>>>> Double.NaN });
>>>> +        assertEquals(-1,  v3.getMinIndex());
>>>> +        assertTrue(Double.isNaN(v3.getMinValue()));
>>>> +        assertEquals(-1,  v3.getMaxIndex());
>>>> +        assertTrue(Double.isNaN(v3.getMaxValue()));
>>>> +        ArrayRealVector v4 = new ArrayRealVector(new double[0]);
>>>> +        assertEquals(-1,  v4.getMinIndex());
>>>> +        assertTrue(Double.isNaN(v4.getMinValue()));
>>>> +        assertEquals(-1,  v4.getMaxIndex());
>>>> +        assertTrue(Double.isNaN(v4.getMaxValue()));
>>>> +    }
>>>> +
>>>> +
>>>>     /** verifies that two vectors are close (sup norm) */
>>>>     protected void assertClose(String msg, double[] m, double[] n,
>>>>             double tolerance) {
>>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> For additional commands, e-mail: dev-h...@commons.apache.org
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>

Is it not possible to just make a generic getMaxIndex(Iterator
iterator) method, and then the user can just supply whichever iterator
convenient for her?

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

Reply via email to