Как найти максимальное число в двумерном массиве

I’m trying to find an elegant way to find the max value in a two-dimensional array.
for example for this array:

[0, 0, 1, 0, 0, 1] [0, 1, 0, 2, 0, 0][0, 0, 2, 0, 0, 1][0, 1, 0, 3, 0, 0][0, 0, 0, 0, 4, 0]

I would like to extract the value ‘4’.
I thought of doing a max within max but I’m struggling in executing it.

snakecharmerb's user avatar

snakecharmerb

45.7k11 gold badges97 silver badges146 bronze badges

asked Nov 20, 2016 at 8:11

Shuki's user avatar

Another way to solve this problem is by using function numpy.amax()

>>> import numpy as np
>>> arr = [0, 0, 1, 0, 0, 1] , [0, 1, 0, 2, 0, 0] , [0, 0, 2, 0, 0, 1] , [0, 1, 0, 3, 0, 0] , [0, 0, 0, 0, 4, 0]
>>> np.amax(arr)

answered Jul 24, 2018 at 11:03

Khan Saad Bin Hasan's user avatar

2

Max of max numbers (map(max, numbers) yields 1, 2, 2, 3, 4):

>>> numbers = [0, 0, 1, 0, 0, 1], [0, 1, 0, 2, 0, 0], [0, 0, 2, 0, 0, 1], [0, 1, 0, 3, 0, 0], [0, 0, 0, 0, 4, 0]

>>> map(max, numbers)
<map object at 0x0000018E8FA237F0>
>>> list(map(max, numbers))  # max numbers from each sublist
[1, 2, 2, 3, 4]

>>> max(map(max, numbers))  # max of those max-numbers
4

answered Nov 20, 2016 at 8:13

falsetru's user avatar

falsetrufalsetru

354k63 gold badges720 silver badges631 bronze badges

Not quite as short as falsetru’s answer but this is probably what you had in mind:

>>> numbers = [0, 0, 1, 0, 0, 1], [0, 1, 0, 2, 0, 0], [0, 0, 2, 0, 0, 1], [0, 1, 0, 3, 0, 0], [0, 0, 0, 0, 4, 0]
>>> max(max(x) for x in numbers)
4

answered May 21, 2018 at 1:34

schmy's user avatar

schmyschmy

1211 silver badge5 bronze badges

>>> numbers = [0, 0, 1, 0, 0, 1], [0, 1, 0, 2, 0, 0], [0, 0, 2, 0, 0, 1], [0, 1, 0, 3, 0, 0], [0, 0, 0, 0, 4, 0]

You may add key parameter to max as below to find Max value in a 2-D Array/List

>>> max(max(numbers, key=max))
4

answered Jun 7, 2021 at 2:22

afghani's user avatar

afghaniafghani

3694 silver badges7 bronze badges

How about this?

import numpy as np
numbers = np.array([[0, 0, 1, 0, 0, 1], [0, 1, 0, 2, 0, 0], [0, 0, 2, 0, 0, 1], [0, 1, 0, 3, 0, 0], [0, 0, 0, 0, 4, 0]])

print(numbers.max())

4

cebe's user avatar

cebe

3,5501 gold badge23 silver badges37 bronze badges

answered Apr 8, 2020 at 11:57

Gurami's user avatar

1

One very easy solution to get both the index of your maximum and your maximum could be :

numbers = np.array([[0,0,1,0,0,1],[0,1,0,2,0,0],[0,0,2,0,0,1],[0,1,0,3,0,0],[0,0,0,0,4,0]])
ind = np.argwhere(numbers == numbers.max()) # In this case you can also get the index of your max
numbers[ind[0,0],ind[0,1]]

answered Apr 1, 2021 at 14:57

Markh's user avatar

MarkhMarkh

535 bronze badges

This approach is not as intuitive as others but here goes,

numbers = [0, 0, 1, 0, 0, 1], [0, 1, 0, 2, 0, 0], [0, 0, 2, 0, 0, 1], [0, 1, 0, 3, 0, 0], [0, 0, 0, 0, 4, 0]

maximum = -9999

for i in numbers:

    maximum = max(maximum,max(i))

return maximum"

answered Jun 25, 2022 at 3:39

EdwardFunnyHands's user avatar

Изучаю С++ по purecodecpp.com/archives/1158 и нашел задачку в комментариях, которую не могу решить.
Массив заполнил, разделил на одномерные и тут заглох, не знаю как найти наибольшее число.

Вот сам код с условием.

/*
В метании молота состязается n спортcменов. Каждый из них сделал m бросков.
Победителем соревнований объявляется тот спортсмен, у которого максимален наилучший результат по всем броскам.
Таким образом, программа должна найти значение максимального элемента в данном массиве,
а также его индексы (то есть номер спортсмена и номер попытки).
Входные данные
Программа получает на вход два числа n и m, являющиеся числом строк и столбцов в массиве.
Далее во входном потоке идет n строк по m чисел, являющихся элементами массива.

Выходные данные
Программа выводит значение максимального элемента, затем номер строки и номер столбца,
в котором он встречается. Если в массиве несколько максимальных элементов,
то нужно вывести минимальный номер строки, в которой встречается такой элемент,
а если в этой строке таких элементов несколько, то нужно вывести минимальный номер столбца.
Не забудьте, что все строки и столбцы нумеруются с 0.
*/
#include "stdafx.h"
#include <iostream>
#include <string>
#include <ctime>
#include <iomanip> // setw(отступ)

using namespace std;

int main() {

	setlocale(0, "");
	srand(time(NULL));

	const int ROWSIZE = 3;
	const int COLSIZE = 3;

	int arr[ROWSIZE][COLSIZE] = {};
	// заполнение массива с клавиатуры
	/*
	for (int rowNum = 0; rowNum < ROWSIZE; rowNum++) {
		for (int colNum = 0; colNum < COLSIZE; colNum++) {
			cout << "Пожалуйста, введите исходные значения массива: ";
			cout << rowNum + 1 << "-я строка ";
			cout << colNum + 1 << "-я колонка ";
			cin >> arr[rowNum][colNum];
			
		}
	}
	*/
	// Заполняем массив случайными числами
	for (int rowNum = 0; rowNum < ROWSIZE; rowNum++) {
		cout << "Строка " << rowNum + 1 << ": ";
		for (int colNum = 0; colNum < COLSIZE; colNum++) {
			arr[rowNum][colNum] = 1 + rand() % 9;
			cout << setw(2) << arr[rowNum][colNum];
		}
		cout << endl;
	}
	// Разделяем двумерный массив на одномерные
	int row[ROWSIZE]{};
	int col[COLSIZE]{};
	for (int r = 0; r < ROWSIZE; r++) {
		row[r] = arr[r - 1][COLSIZE];
		cout << row[r] << "|";
		
		for (int c = 0; c < COLSIZE; c++) {
			col[c] = arr[c][r];
			//cout << col[c] << "|" << endl;
		}
		
	}
	system("pause");
	return 0;
};

0 / 0 / 0

Регистрация: 08.05.2012

Сообщений: 21

1

Найти максимальное значение двумерного массива

08.05.2012, 20:31. Показов 26351. Ответов 6


Студворк — интернет-сервис помощи студентам

Помогите написать программу :Как найти максимальное значение двумерного массива?



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

08.05.2012, 20:31

6

Infinity3000

1066 / 583 / 87

Регистрация: 03.12.2009

Сообщений: 1,255

08.05.2012, 20:37

2

массив 3х3

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "iostream"
#include "ctime"
 
using namespace std;
 
 
int main(int argc, char* argv[])
{
    srand(time(0));
    int mas[3][3] = {0};
    int max;
    for(int i = 0; i < 3; i++)
    {
        for(int j = 0; j < 3; j++)
        {
            cout << (mas[i][j] = rand() % 100) << "t";
        }
        cout << endl;
    }
    max = mas[0][0];
    for(int i = 0; i < 3; i++)
    {
        for(int j = 0; j < 3; j++)
        {
            if(mas[i][j] > max)
            {
                max = mas[i][j]; 
            }
        }
    }
 
    cout << endl << "Max = " << max << endl;
    return 0;
}



1



0 / 0 / 0

Регистрация: 08.05.2012

Сообщений: 21

08.05.2012, 20:40

 [ТС]

3

Спасибо большое!! А скажите пожалуйста,где тут ошибка…
#include <iostream>
using namespace std;
void main ()
{

int A[3][3],i,j,max;
max=A[0][0];
for(i=0;i<3;i++);
for(j=0;j<3;j++);
{if(max<A[i][j]);
max=A[i][j];}
cout<<«max=»<<max;
}



0



1066 / 583 / 87

Регистрация: 03.12.2009

Сообщений: 1,255

08.05.2012, 20:43

4

Я так понимаю это тоже вы https://www.cyberforum.ru/cpp-… 68875.html

Цитата
Сообщение от Taika
Посмотреть сообщение

А скажите пожалуйста,где тут ошибка…

Вы не инициализировали массив, объявили

Цитата
Сообщение от Taika
Посмотреть сообщение

int A[3][3]

а заполнять кто будет??



1



0 / 0 / 0

Регистрация: 08.05.2012

Сообщений: 21

08.05.2012, 20:44

 [ТС]

5

а как это сделать?? Я не знаю…поэтому прощу помощи



0



Infinity3000

1066 / 583 / 87

Регистрация: 03.12.2009

Сообщений: 1,255

08.05.2012, 20:48

6

и точка с запятой после for и if не нужны

C++
1
2
3
for(i=0;i<3;i++);
 for(j=0;j<3;j++);
 {if(max<A[i][j]);

Добавлено через 1 минуту

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
 
using namespace std;
 
int  main ()
{
    int A[3][3],i,j,max;
 
    for(i = 0; i < 3; i++)
    {
        for(j = 0;j < 3;j++)
        {
            cin >> A[i][j];
        }
    }
    max=A[0][0];
    for(i = 0;i < 3; i++)
    {
        for(j = 0; j < 3; j++)
        {
            if(max<A[i][j])
            max=A[i][j];
        }
    }
    cout << "max = " << max;
    return 0;
 }



1



0 / 0 / 0

Регистрация: 08.05.2012

Сообщений: 21

08.05.2012, 20:53

 [ТС]

7

большое вам спасибо!!!!



0



I am trying to find min (by row) and max (by column) element in two-dimensional (4,4) array and then store them in new array (5,5).

That is how it should look for new array (5,5):

1 2 3 4 min
5 6 7 8 min
4 4 4 5 min
3 5 5 6 min
m m m m  0

*m — max

Here it is the entire code:

#include <iostream>
using namespace std;
int main() {
    int A[4][4];/*First array*/
    int i, j;


    for (i = 0; i < 4; i++)
        for (j = 0; j < 4; j++) {
            cout << "n A[" << i + 1 << "][" << j + 1 << "]=";
            cin >> A[i][j];
        }

    for (i = 0; i < 4; i++) {
        for (j = 0; j < 4; j++)
            cout << A[i][j] << "t";

        cout << "n";
    }
    {
        int min[4];/* find min on each row*/
        for (i = 0; i < 4; i++) {
            min[i] = A[0][i];
            for (j = 1; j < 4; j++) {
                if (min[i] > A[i][j])
                    min[i] = A[i][j];
            }
        }
        int newarr[5][5];/* here i create the new array 5,5)*/
        int max[5] = { 1,2,3,4,5 };
        for (i = 0; i < 4; i++) {
            for (j = 0; j < 4; j++) {
                newarr[i][j] = A[i][j];
                newarr[i][5] = max[i];
            }
        }

        for (j = 0; j < 4; j++)
            newarr[5][j] = min[j];
        cout << newarr[5][j] << "t";
        cout << "n";
}

}

I put random elements to max. Because so far I only test. But once I started my program it show correct only the first array. And where should be the new array it shows zero. Here it is the outcome of the debugging:

5   4   3   1   
5   6   7   9   
4   2   3   9   
4   8   4   6   
0   

How to fix it?
And how to put zero in the last element (as you can see in the first table for the new array).

Встречаю часто вопросы у студентов по поиску минимального значения в массиве, решил привести различные вариации поиска в разных массивах.

Поиск минимального значения в одномерном массиве с помощью Linq.

  static void Main(string[] args)

        {

            int[] num = { 2, 5, 6, 3, 7, 9, 1 };

            //Одномерный

            Console.WriteLine(num.Min());

            Console.ReadKey();

        }

Поиск максимального значения в одномерном массиве с помощью Linq.

static void Main(string[] args)

        {

                int[] num = { 2, 5, 6, 3, 7, 9, 1 }; //Одномерный

                Console.WriteLine(num.Max());

                Console.ReadKey();

        }

Поиск минимального значения в одномерном массиве с помощью цикла методом перебора.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

     static void Main(string[] args)

        {

            int[] num = { 2, 5, 6, 3, 7, 9, 1 };

            //Одномерный

            int tmpMin = int.MaxValue;

            for (int i = 0; i < num.Length; i++)

            {

                if (tmpMin > num[i])

                {

                    tmpMin = num[i];

                }

            }

            Console.WriteLine(tmpMin);

            Console.ReadKey();

        }

Поиск максимального значения в одномерном массиве с помощью цикла методом перебора.

    static void Main(string[] args)

        {

            int[] num = { 2, 5, 6, 3, 7, 9, 1 }; //Одномерный

            int tmpMax = int.MinValue;

            for (int i = 0; i < num.Length; i++)

            {

                if (tmpMax < num[i])

                {

                    tmpMax = num[i];

                }

            }

            Console.WriteLine(tmpMax);

            Console.ReadKey();

        }

Поиск минимального значения в многомерном массиве, с помощью Linq

Многомерный массив, в отличие от одномерного массива, не позволяет нам напрямую обратиться к методу Min. Но, это можно легко исправить, если воспользоваться методом Cast<T>, с помощью которого можно преобразовать многомерный массив в обобщенную коллекцию типа IEnumerable<T>. После чего нам станет доступен метод Min, и мы сможем найти минимальное значение массива, например:

        static void Main(string[] args)

        {

            int[,] numbers = { { 100, 20, 63, 39, 428, 118 }, { 22, 34, 63, 59, 68, 26 } };

            IEnumerable<int> colNumbs = numbers.Cast<int>();

            int minValue = colNumbs.Min();

            Console.WriteLine(minValue);

            Console.ReadKey();

        }

Поиск максимального значения в многомерном массиве, с помощью Linq

Поиск минимального значения в массив массивов, или зубчатом массиве.

   static void Main(string[] args)

        {

            int[,] numbers = { { 100, 20, 63, 39, 428, 118 }, { 22, 34, 63, 59, 68, 26 } };

            IEnumerable<int> colNumbs = numbers.Cast<int>();

            int maxValue = colNumbs.Max();

            Console.WriteLine(maxValue);

            Console.ReadKey();

        }

Чтобы найти минимальное значение в Jagged массиве, необходимо преобразовать содержимое массива в объект типа IEnumerable<T>. , но только выполнить эту операцию нужно не с помощью метода Cast, а например, с помощью метода SelectMany:

  static void Main(string[] args)

        {

            int[][] numbers = { new int [] {12,123,35,75,33}, new int [] {44,42,64,96}, new int [] {121,42,733,45}};

            int minValue = numbers.SelectMany(x => x).Min();

            Console.WriteLine(minValue);

            Console.ReadKey();

        }

Поиск максимального значения в массив массивов, или зубчатом массиве.

   static void Main(string[] args)

        {

            int[][] numbers = { new int[] { 12, 123, 35, 75, 33 }, new int[] { 44, 42, 64, 96 }, new int[] { 121, 42, 733, 45 } };

            int maxValue = numbers.SelectMany(x => x).Max();

            Console.WriteLine(maxValue);

            Console.ReadKey();

        }

Понравилась статья? Поделить с друзьями:
  • Как можно найти деньги сейчас
  • Как быстро найти нод числа
  • Как найти частоту вращения заготовки
  • Как найти маршрут по телефону
  • Как составить свой маркетинг план