Finding the greatest number in each row a matrix

  • Thread starter Thread starter physicophile
  • Start date Start date
  • Tags Tags
    Matrix Row
Click For Summary

Discussion Overview

The discussion revolves around finding the greatest number in each row of a matrix using C programming. Participants share code snippets and explore different approaches and optimizations related to the task.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • The original poster (OP) shares an incomplete C code snippet and seeks feedback on their approach to finding the maximum value in each row of a matrix.
  • Another participant provides a complete example of a function that finds the maximum value per row, using DBL_MIN as the initial value for comparisons.
  • Some participants question the use of DBL_MIN, suggesting that using the first number from the row as the initial value could save a comparison per row.
  • One participant notes that implementing the OP's approach as written does eliminate one comparison but raises concerns about the lack of checks for special values like INF and NAN.

Areas of Agreement / Disagreement

There is no consensus on the best initial value to use for finding the maximum in each row, with some participants advocating for DBL_MIN while others suggest using the first element of the row. The discussion remains unresolved regarding the optimal approach and the handling of special values.

Contextual Notes

Participants express varying assumptions about the input data, particularly regarding the presence of special values such as INF and NAN, which may affect the robustness of the proposed solutions.

physicophile
Messages
19
Reaction score
0
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);
}}
 
Technology news on Phys.org
There were enough issues to warrant a full example for a matrix [n] x [3]:
Code:
/* 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:
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?
 
Borek said:
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?

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

Code:
         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 into the mix. This code is devoid of checks. INF and NAN values may cause problems
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
Replies
1
Views
3K
  • · Replies 9 ·
Replies
9
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 34 ·
2
Replies
34
Views
6K
  • · Replies 25 ·
Replies
25
Views
3K
  • · Replies 9 ·
Replies
9
Views
3K