Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Finding the greatest number in each row a matrix

  1. Apr 30, 2008 #1
    Hi, everybody. Could some one please help find the greatest number in each row of a matrix, this is what i have so far.. am i one the right track? (using C code)




    Float big;
    Big = -9999999.99999

    for( i==0) {
    for( j = 0; j < n; j++) {
    if( *(mat + (j*0) + 0) > big) {
    bigc1 = *(mat + 0*j + 0);
    }}
    for( i==1) {
    for( j = 0; j < n; j++) {
    if( *(mat + (j*1) + 1) > big) {
    bigc2 = *(mat + 1*j + 1);
    }}
    for( i==2) {
    for( j = 0; j < n; j++) {
    if( *(mat + (j*2) + 2) > big) {
    bigc3 = *(mat + 2*j + 2);
    }}
     
  2. jcsd
  3. May 1, 2008 #2

    jim mcnamara

    User Avatar
    Science Advisor
    Gold Member

    There were enough issues to warrant a full example for a matrix [n] x [3]:
    Code (Text):

    /* max per "row" */
    #include <stdlib.h>
    #include <limits.h>  /* we need DBL_MIN */

    /* find max in each row of a matrix or table */
    void max_per_row( double *result,
                              double matrix[][3],
                              const int xmax,
                              const int ymax)
    {
        int x=0, y=0;

        for(y=0; y < ymax; y++)
            result[y]=DBL_MIN;
        for(y=0; y < ymax; y++)
        {
            for(x=0; x < xmax; x++)
            {
                if ( matrix[y][x] > result[y] )
                    result[y]=matrix[y][x];
            }
        }
    }

    int main(int argc, char **argv)
    {
        double test1[3][3]={ {-10, -20, 0},
                             {-13, 0,  13},
                             {-99, 99.99, 100.01}};
        double result[10]={0};
        int y=0;
        max_per_row(result, test1, 3, 3 );
        for(y=0; y < 3 ; y++)
            printf("max row %d = %f\n", y, result[y]);
        return 0;
    }
     
     
    Last edited: May 1, 2008
  4. May 1, 2008 #3

    Borek

    User Avatar

    Staff: Mentor

    Why do you (both) use DBL_MIN? If you are looking for the greatest number you can use first number from the row as an initial value. That saves one comparison per each row. Or am I missing something?
     
  5. May 2, 2008 #4

    jim mcnamara

    User Avatar
    Science Advisor
    Gold Member

    I implemented the OP's program in the way he wrote it. Yes, using the first value does eliminate one comparison.

    Code (Text):

             for(x=1, result[y]=matrix[y][0]; x < xmax; x++)
            {
                if ( matrix[y][x] > result[y] )
                    result[y]=matrix[y][x];
            }
     
    To be closer to bulletproof: isnan() or something like it should be in there too. Which adds more overhead back in to the mix. This code is devoid of checks. INF and NAN values may cause problems
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: Finding the greatest number in each row a matrix
Loading...