在C ++中查找矩阵的最大值,最小值,平均值

时间:2011-02-08 16:33:55

标签: c++ matrix

如何在C ++中找到给定矩阵(matrix[i][j])中的最大值,最小值和平均值。类型是unsigned long double。

4 个答案:

答案 0 :(得分:9)

这里没有什么聪明的做法(仅限伪代码,因为它闻起来像HW):

for each entry in the matrix:
    add the entry to a running sum
    compare the entry to a running min
        if it's smaller, it's the new running min
    compare the entry to a running max
        if it's larger, it's the new running max
average is the sum divided by the number of entries

你可以对这个循环进行微优化,使其效率更高或更低,但是你无法做到算法更聪明。无论如何,您都需要查看所有i*j条目。

答案 1 :(得分:3)

也许这个:

<强>最大

int maximum = 0;
for(int x=0; x<width; ++x)
  for(int y=0; y<height; ++y)
    maximum = std::max(matrix[x][y], maximum);

<强>最小

int minimum = 0;
for(int x=0; x<width; ++x)
  for(int y=0; y<height; ++y)
    minimum = std::min(matrix[x][y], minimum);

Avarage

int avarage = 0;
for(int x=0; x<width; ++x)
  for(int y=0; y<height; ++y)
    avarge += matrix[x][y];
avarge /= width*height;

答案 2 :(得分:3)

假设matrix是一个实际的C ++二维数组,你可以使用标准算法。

未经测试的代码:

long double mean = std::accumulate(matrix[0], matrix[0] + i*j, 0.0) / (i*j);
long double matrix_min = std::min_element(matrix[0], matrix[0] + i*j);
long double matrix_max = std::max_element(matrix[0], matrix[0] + i*j);

请注意,为了清楚它正在做什么,这会对矩阵进行额外的传递。

如果它是vector vector的另一个容器类型,那么你必须在每一行上运行算法并取每行的最大值。

答案 3 :(得分:1)

循环显示所有值,记录当前最大值,最小值和累计总和。然后将累积和除以元素数得到均值。