[ 
https://issues.apache.org/jira/browse/MATH-1372?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15310324#comment-15310324
 ] 

Artem Barger commented on MATH-1372:
------------------------------------

Hi,

First of all thanks for reviewing my code and writing detailed explanation.

I'm wondering what is the benefit of private static method, which basically 
repeats logic of methods I've suggested and has an additional boolean parameter
which indicate whenever we would like to get min or max elements index.


While I think it terms or reducing code duplication following could have more 
sense:
{code}
    private static int argMinOrMax(final double[] data,
                                   boolean isMin) {
        if (data == null ||
                data.length == 0) {
            return -1;
        }

        int index = 0;
        int direction = (isMin) ? 1 : -1;
        double selected = direction * data[0];

        for (int i = 1; i < data.length; i++) {
            final double current = direction * data[i];
            if (current < selected) {
                index = i;
                selected = current;
            }
        }
        return index;
    }
{code}

at least now it avoids code duplication at some extent.

Regarding preconditions,  I've took other method of {{MathArrays}} to look what 
is expected behavior for precondition testing, but didn't find something 
specific hence assumed that getting an NPE is expected. Obviously I was wrong, 
but that also mean methods such as: {{unique}}, {{shuffle}}, 
{{linearCombination}} and probably a couple of other also need to be fixed or 
changed to take care of nulls and other possible incorrect inputs.


I'm sorry for the imports part, I've forgot to turn off this annoying feature 
of my IDEA.


And thanks again for catching a BUG in the tests w/ Double.MIN_VALUE.


With regards to the right place, I'm not really sure, from one point of view it 
make sense to keep it here, since {{MathArray}} includes a lot of utilities to 
work with arrays, but I've discovered that {{StatUtils}} also includes relevant 
parts as for example finding minimum or maximum value in the arrays. 

> Add argmin/argmax static functions to MathArrays utility class
> --------------------------------------------------------------
>
>                 Key: MATH-1372
>                 URL: https://issues.apache.org/jira/browse/MATH-1372
>             Project: Commons Math
>          Issue Type: Wish
>            Reporter: Artem Barger
>            Assignee: Artem Barger
>            Priority: Trivial
>         Attachments: MATH-1372.patch
>
>
> Following conversation in the ML thread.
> Working lately w/ CM, I've found myself using a lot functions which helps to 
> identify the index of the min/max elements in given array of doubles. 
> In ML it was pointed out that similar functionality already exists in 
> RealVector, however due to MATH-765 it's planned to be removed (deprecated), 
> moreover to use it one has to create an instance of RealVector, where for 
> simple cases it might be redundant.
> Hence I'd like to propose to add these static methods to the MathArrays 
> utility class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to