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
45.7k11 gold badges97 silver badges146 bronze badges
asked Nov 20, 2016 at 8:11
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
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
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
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
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
3,5501 gold badge23 silver badges37 bronze badges
answered Apr 8, 2020 at 11:57
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
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
Изучаю С++ по 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
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 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
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 |