2016-04-21 195 views
0
float allmin[column]; 
float allmax[column]; 
float min= std::numeric_limits<float>::max(); 
float max= std::numeric_limits<float>::min(); 

for(int y = 0; y < column; y++) 
    { 

    for(int x = 0; x < row; x++) 
     { 
     allmin[y] = std::min(matrix[x][y], min); 
     allmax[y] = std::max(matrix[x][y], max); 
     } 

    cout << "Mins " << allmin[y] << "\n"; 
} 

我需要每列的最小元素。我的矩阵是250x6,它打印的是矩阵的最后一行。2D阵列的最小/最大元素

+0

它的副本http://stackoverflow.com/questions/34210401/finding-the-maximum-value-of-every-row-in-2d-array -c – piyushj

+0

在行循环中,您需要更新min和max,而不是allmin和allmax,因为min和max始终保持相同的最大和最小浮点值。然后,在内部循环之后,使用min和max中的值更新allmin和allmax。另外,请确保您在外部循环内部初始化最小值和最大值,以便它们不会与之前的列值相一致。 –

+0

初始化第一个循环中的最小最大值:min = matrix [0] [y]; max = matrix [0] [y]; –

回答

2

需要两个更正:

不要为每个列的相同的​​变量,而是一个不同的,就像直接在allminallmax行。

在进入循环之前对其进行初始化。一个经典的解决方案是用行的第一个元素初始化它,并检查循环中的下一个元素。

for(int y = 0; y < column; y++) 
    { 
    allmin[y] = matrix[0][y]; 
    allmax[y] = matrix[0][y]; 
    for(int x = 1; x < row; x++) 
     { 
     allmin[y] = std::min(matrix[x][y], allmin[y]); 
     allmax[y] = std::max(matrix[x][y], allmax[y]); 
     } 

    cout << "Mins " << allmin[y] << "\n"; 
} 
+0

它会更有意义。它返回矩阵中不存在的值。我得到的值从1到5000,2个浮点并将其返回分钟] 7.18866e-43 分钟] 0 分钟] -7.85255e + 06 分钟] 4.57692e-41 分钟] 1.68436e-42 分钟] 3.05483e-43 –

0

因为声明allmin[y] = std::min(matrix[x][y], min);,该matrix[x][y] is always small than分钟(的std :: numeric_limits ::最大()), so when internal loop execute, allmin [Y] is updated to ·matrix[x][y]每一个时间,所以在最后allmin[y]更新为matrix[259][y]y行的最后一列) 。 allmax[y] = std::max(matrix[x][y], max);有同样的问题。

您应该将您的代码更改为 ``` float allmin [column]; float allmax [column]; float min = std :: numeric_limits :: max(); float max = std :: numeric_limits :: min();

for(int y = 0; y < column; y++) 
{ 
    allmin[y] = min 
    allmax[y] = max 
    for(int x = 0; x < row; x++) 
    { 
     allmin[y] = std::min(matrix[x][y], allmin[y]); //allmin[y] always store the min value has meet before 
     allmax[y] = std::max(matrix[x][y], allmax[y]); //allmax[y] always store the max value has meet before 
    } 

    cout << "Mins " << allmin[y] << "\n"; 
} 

,一切都会好起来

相关问题