Список максимальных значений столбцов в матрице (без Numpy) - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь получить список максимальных значений столбцов в матрице без Numpy. Я пытаюсь написать тонны кодов, но не могу найти нужный вывод.

Вот мой код:

list=[[12,9,10,5],[3,7,18,6],[1,2,3,3],[4,5,6,2]]

list2=[]

def maxColumn(m, column):   
    for row in range(len(m)):
        max(m[row][column])  # this didn't work
        x = len(list)+1 
    for column in range(x):
        list2.append(maxColumn(list, column))

print(list2)

А вот требуемый вывод:

[12, 9, 18, 6]

Ответы [ 4 ]

0 голосов
/ 29 октября 2018

Вы можете использовать эту функцию:

def max_col(my_list):

result = []
i = 0

while i < len(my_list[0]):

    max_val = my_list[0][i]
    j = 1

    while j < len(my_list):

        if my_list[j][i] > max_val:
            max_val = my_list[j][i]

        j += 1

    result.append(max_val)
    i += 1

return(result)
0 голосов
/ 29 октября 2018

Во-первых, никогда не называйте свои списки list, поскольку это делает list структуру данных python бесполезной в последующем коде.

Код с комментариями:

my_list=[[12,9,10,5],[3,7,18,6],[1,2,3,3],[4,5,6,2]]

def maxColumn(my_list):

    m = len(my_list)
    n = len(my_list[0])

    list2 = []  # stores the column wise maximas
    for col in range(n):  # iterate over all columns
        col_max = my_list[0][col]  # assume the first element of the column(the top most) is the maximum
        for row in range(1, m):  # iterate over the column(top to down)

            col_max = max(col_max, my_list[row][col]) 

        list2.append(col_max)
    return list2

print(maxColumn(my_list))  # prints [12, 9, 18, 6]

Кроме того, хотя вы упомянули специально для решения без numpy, но в numpy это так просто:

list(np.max(np.array(my_list), axis=0))

Что просто говорит, преобразуйте my_list в пустой массив, а затем найдите максимум по столбцам (ось = 0 означает, что вы перемещаетесь сверху вниз в вашем массиве).

0 голосов
/ 29 октября 2018

Python имеет встроенный zip, который позволяет вам транспонировать 1 ваш список списков:

L = [[12,9,10,5], [3,7,18,6], [1,2,3,3], [4,5,6,2]]

def maxColumn(L):    
    return list(map(max, zip(*L)))

res = maxColumn(L)

[12, 9, 18, 6]

1 Официальное описание того, что делает zip:

Создайте итератор, который объединяет элементы из каждого итерируемого элемента.

0 голосов
/ 29 октября 2018

Один из подходов - перебирать строки и сохранять максимальное значение для каждой позиции (столбца):

lst = [[12, 9, 10, 5], [3, 7, 18, 6], [1, 2, 3, 3], [4, 5, 6, 2]]

answer = lst[0]
for current in lst[1:]:
    answer = [max(x, y) for x, y in zip(answer, current)]

print(answer)

Выход:

[12, 9, 18, 6]

Другой подход - сначала построить столбцы из заданного списка строк, а затем просто найти максимум в каждом столбце.

...