Как найти наибольший элемент двумерного массива

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;
};

/*
finding largest element in an 2d array
*/
hi im trying to find the largest element in a two dimensional array can anybody help.the output i get is 8 but it should be 45

class LargestSmallestOfTwoDimensionalArray
{
    public static void main(String[] args)
    {
        int[][] data ={ {8,1,25,3,4},{45,12,13,2,3} };  // array of data


        int large = data[0][0];

        for(int i =0 ; i < data.length ; i++)
        {
           for(int j =i + 1 ; j < data.length ; j++)
           {
              if(large < data[i][j])
              {
                large= data[i][j];//checking and storing the largest element

              }
           }
        }

      System.out.println("Largest Element :" + large);
    }
}

asked Mar 26, 2015 at 20:10

Colin Anacoura's user avatar

2

The problem lies in second loop, start at zero and check your condition:

 for (int j = 0; j < data[i].length ; j++)

Remember, you need to check for the length of the inner list, not outer.

answered Mar 26, 2015 at 20:12

Malik Brahimi's user avatar

Malik BrahimiMalik Brahimi

16.3k7 gold badges37 silver badges69 bronze badges

The problem is that you are not checking every position in the array.

Change your code to this:

int[][] data ={ {8,1,25,3,4},{45,12,13,2,3} };  // array of data


    int large = data[0][0];

    for(int i =0 ; i < data.length ; i++)
    {
       for(int j =0 ; j < data[i].length ; j++)
       {
          if(large < data[i][j])
          {
            large= data[i][j];//checking and storing the largest element

          }
       }
    }

  System.out.println("Largest Element :" + large);

Hope it helps..

answered Mar 26, 2015 at 20:12

Laerte's user avatar

LaerteLaerte

6,9633 gold badges32 silver badges50 bronze badges

0

Массив,
для задания элементов которого требуется
использовать два индекса, называется
двумерным. Примеры двумерных массивов:
места в зрительном зале театра, где
каждое место характеризуется номером
ряда и номером кресла в ряду; таблица
результатов спортивного чемпионата,
где все команды характеризуется
результатом игры с каждым из соперников
и др.

Двумерные
массивы, в которых диапазоны индексов
начинаются с 1, также называются иногда
матрицами. Размерность каждой матрицы
определяется как MxN, где М – число строк
в матрице, N – число столбцов.

Если
число строк матрицы равняется числу
столбцов, то матрицы данного типа
называются квадратными. Элементы
квадратной матрицы вида B[1,1], B[2,2], B[3,3]…
составляют главную диагональ матрицы.
Иногда вводят понятие побочной диагонали
квадратной матрицы для элементов вида
B[1,N], B[2,N-1], B[3,N-2]…B[N,1], где N – число строк
(столбцов) матрицы.

Описание
типов двумерных массивов в языке Pascal
осуществляется аналогично описанию
типов одномерных массивов с добавлением
диапазона изменения второго индекса.

Примеры:

TYPE
MATR=[1..4,1..5] OF INTEGER;

TYPE
B=[2..9,0..6] OF REAL;

TYPE
C=ARRAY[-1..4,-1..4] OF CHAR.

Также
допускается указание имени другого
типа массива в качестве типа элементов
массива, например:

TYPE
VEC=ARRAY[1..4] OF REAL;

MAS=ARRAY[1..5]
OF VEC.

В
результате приведенного выше описания
тип массива MAS будет объявлен как тип
двумерного массива, первый индекс
которого будет меняться от 1 до 5, а второй
индекс – от 1 до 4, т.е. размерность массива
составит 5х4 элементов.

При
вводе и выводе элементов двумерных
массивов используются вложенные циклы,
в которых внешний оператор цикла, как
правило, задает изменение строк массива,
внутренний оператор цикла – изменение
столбцов.

5.5 Примеры задач с использованием двумерных массивов

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

5.5.1 Нахождение наибольшего элемента в заданной строке матрицы

Пусть
задана матрица А из действительных
чисел размера 3х4. Найти наибольший
элемент во второй строке данной матрицы.

Приведем
программу решения задачи в виде:

Program
max_st;

Type
Matr=array[1..3,1..4] of real;

Var
max:real;

a:Matr;

i,j:integer;

begin

for
i:=1 to 3 do

for
j:=1 to 4 do

begin

writeln(‘Введите
элемент а[‘,i,’,’,j,’]’);

readln(a[i,j]);

end;

max:=a[2,1];

for
j:=2 to 4 do

if
max<a[2,j] then max:=a[2,j];

writeln(‘Наибольший
элемент второй строки=’,max:8:2);

end.

Данная
программа представляет собой реализацию
алгоритма нахождения наибольшего
элемента вектора, полученного путем
фиксирования одного из индексов
двумерного массива.

5.5.2 Нахождение элементов массива, удовлетворяющих определенному условию

Известны
результаты 5 студентов по итогам экзаменов
по химии и информатике. Найти фамилии
студентов, сдавших оба экзамена на
отлично.

Для
решения поставленной задачи может быть
использована следующая программа:

program
Sessia;

type
PR=array [1..5,1..2]of integer;

Fam=array[1..5]of
string[10];

var
r:pr;

st:fam;

i,j:integer;

begin

for
i:=1 to 5 do

begin

writeln(‘Введите
фамилию ‘,i,’-го студента ‘);

readln(st[i]);

writeln(‘Введите
оценку данного студента по химии (от 2
до 5)’);

readln(r[i,1]);

writeln(‘Введите
оценку данного студента по информатике
(от 2 до 5)’);

readln(r[i,2]);

end;

for
i:=1 to 5 do

if
(r[i,1]=5) and (r[i,2]=5) then writeln(‘Студент-отличник
— ‘,st[i]);

end.

В
данной программе для хранения фамилий
студентов используется одномерный
строковый массив st типа Fam, для хранения
оценок студентов – двумерный целочисленный
массив r типа PR, причем первый столбец
матрицы r используется для хранения
результатов экзамена по химии, второй
столбец – экзамена по информатике. Если
у некоторого студента оценки за оба
экзамена составили 5 баллов, то его
фамилия будет выведена на экран с
сообщением «Студент-отличник».

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Программа ввода и вывода элементов массива может выглядеть следующим образом:

program z1;
const nm=10; mm=10;
type mas=array[1..nm,1..mm] of real;
var a:mas;
i,j,n,m:integer;

procedure zap(var a:mas);
var i,j:integer;
begin
assign(input,’input.txt’);
reset(input);
readln(n,m);
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
close(input);
end;

procedure vyv( a:mas);
var i,j:integer;
begin
assign(output,’output.txt’);
rewrite(output);
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:8:2);
writeln;
end;
close(output);
end;

begin
zap(a);
vyv(a);
end.


Сохраните программу в файл и используйте как шаблон для решения задач с двумерным массивом.


Задания

Задание 1. Найти максимальный элемент массива и его номера. Элементы могут повторяться.

Указание: Поиск максимального элемента в двумерном массиве осуществляется таким же образом, как и в линейном массиве: предполагают, что максимальный — это первый элемент, затем максимальный сравнивается со следующим элементом, и если максимальный окажется меньше, то заменяем его значение.

Формат ввода:
В первой строке вводятся числа n и m — количество строк и столбцов массива
В следующих строках находятся элементы массива построчно

Формат вывода:
В первой строке — максимальный элемент
Во второй и следующих строках номер строки и номер столбца максимального элемента



      Тесты                 Посмотреть решение        

Экспериментальный раздел

1. Найти минимальный элемент массива и его номера. Элементы могут повторяться.
2. Найти минимальный элемент среди элементов главной и побочной диагоналей.


Задание 2. Найти количество отрицательных элементов в каждой строке.

Указание: количество элементов каждой строки хранить в одномерном массиве соответствующей размерности.

Формат ввода:
В первой строке вводятся числа n и m — количество строк и столбцов массива
В следующих строках находятся элементы массива построчно

Формат вывода:
В строку записаны числа — количества отрицательных элементов в каждой строке


        Тесты                Посмотреть решение         

Экспериментальный раздел

1. Найти количество кратных 5 элементов в каждой строке.
2. Найти количество кратных 5 и 2 элементов в каждой строке.
3. Найти количество кратных 5 или 2 элементов в каждой строке.
4. Найти количество отрицательных элементов в каждом столбце.


Задание 3. Дан двумерный массив А, состоящий из n x m вещественных чисел. Известно, что среди его элементов только два равны между собой. Напечатать их индексы.
Указание: Для просмотра первого элемента использовать циклы по переменным i и j, для просмотра второго элемента использовать циклы по переменным  i1 и j1.
Сравниваем a[i,j] c a[i1,j1]. Для исключения просмотра одного и того же элемента проверить условие (not((i=i1) and (j=j1))).

Формат ввода:
В первой строке вводятся числа n и m — количество строк и столбцов массива
В следующих строках находятся элементы массива построчно

Формат вывода:

В первой строке — индексы первого из равных элементов
Во второй строке — индексы второго из равных элементов



            Тесты       Посмотреть решение          


Задание 4. Определить, является ли данный квадратный массив симметричным относительно своей главной диагонали.

Указание: В задачах подобного типа необходимо увидеть зависимость между индексами элементов массива.

Если массив является симметричным, то для него выполняется равенство

 A[i, j]=A[j, i] для всех i=1..n и j=1..n.


Формат ввода:
В первой строке вводится число n — количество строк и столбцов массива
В следующих строках находятся элементы массива построчно

Формат вывода:
вывести YES или NO



          Тесты               
Посмотреть решение          

Экспериментальный раздел

1. Определить, является ли данный квадратный массив симметричным относительно своей побочной диагонали.


Задание 5. В массиве размерностью NxM к элементам четных столбцов прибавить элемент первого столбца соответствующей строки.

Указание: рассматриваем только четные столбцы и к элементу первой строки прибавляем a[1,1], к элементу второй строки прибавляем a[2,1] и т.д.


Формат ввода:
В первой строке вводятся числа n и m — количество строк и столбцов массива
В следующих строках находятся элементы массива построчно

Формат вывода:

Построчно элементы преобразованного массива

          Тесты             Посмотреть решение         

Экспериментальный раздел

1. В массиве размерностью NxM к элементам четных строк прибавить элемент первой строки соответствующего столбца.
2. К нечетным элементам прибавить соответствующие по строке элементы главной диагонали.


Задание  6. Заполнить массив А размером NxM «змейкой» следующим образом:

1

2

3

4

5

6

7

14

13

12

11

10

9

8

15

16

17

18

19

20

21

28

27

26

25

24

23

22

Указание: Для того, чтобы заполнить, надо вывести правило заполнения:

·         если строка нечетная, то   A[i,j]=(i-1)*m+j;

·         если строка четная, то     A[i,j]=i*m-j+1.



Формат вывода
Вывести построчно элементы массива

     Посмотреть решение          

Экспериментальный раздел

1. Заполнить массив размером m x n змейкой, начиная с последнего элемента.

22

23

24

25

26

27

28

21

20

19

18

17

16

15

8

9

10

11

12

13

14

7

6

5

4

3

2

1


Задания для самостоятельного решения

1. Заменить все отрицательные элементы на противоположные.

2. Дан массив  D(6,5). Выведите его на экран в виде таблицы.  Найдите и выведите  количество элементов больших среднего арифметического всех его элементов.

3. Заполнить массив А размером NxM следующим образом:

21

20

19

18

17

16

15

8

9

10

11

12

13

14

7

6

5

4

3

2

1


Тест


Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти на ресивере a one
  • Что означает no atomizer на аегисе как исправить
  • Уточненная 6 ндфл как исправить если нашел ошибку после срока сдачи
  • Как найти исполнительное производство по фамилии алиментам
  • Как найти торгового партнера

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии