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;
};
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
1 |
0 / 0 / 0 Регистрация: 08.05.2012 Сообщений: 21 |
|
08.05.2012, 20:40 [ТС] |
3 |
Спасибо большое!! А скажите пожалуйста,где тут ошибка… int A[3][3],i,j,max;
0 |
1066 / 583 / 87 Регистрация: 03.12.2009 Сообщений: 1,255 |
|
08.05.2012, 20:43 |
4 |
Я так понимаю это тоже вы https://www.cyberforum.ru/cpp-… 68875.html
А скажите пожалуйста,где тут ошибка… Вы не инициализировали массив, объявили
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 не нужны
Добавлено через 1 минуту
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(); } |