Извлечь колонки из матрицы
Мне нужно из матрицы вывести все колонки. Ожидаю такой результат: [[1,3,2],[2,4,3],[3,5,4]]
. Я знаю про существование Numpy
, но мне надо извлечь все колонки из матрицы с помощью lambda
.
Пробовала код:
arr = [[1,2,3],[3,4,5],[2,3,4]]
col = list(map(lambda x: x[0],arr))
print(col)
Результат: [1,3,2]
(только первая колонка)
Изменила код на:
arr = [[1,2,3],[3,4,5],[2,3,4]]
col = list(map(lambda x: x[::],arr))
print(col)
Результат мне вернул мою матрицу без изменений.
Попыталась воспользоваться итерацией:
arr = [[1,2,3],[3,4,5],[2,3,4]]
col = list(map(lambda x: (x[i] for i in range(len(arr))),arr))
print(col)
Но всё равно я не достигла результата.
Я получила вот это:
[<generator object <lambda>.<locals>.<genexpr> at 0x000001F861CE5B10>, <generator object <lambda>.<locals>.<genexpr> at 0x000001F861CE7AC0>, <generator object <lambda>.<locals>.<genexpr> at 0x000001F861CE7C60>]
Я в тупике. Не судите строго, ведь я новичок в Python
.
Ответы (2 шт):
Чтобы извлечь все колонки из матрицы с помощью lambda
, вам нужно обработать данные так, чтобы каждая колонка из всех строк была выделена в отдельный список. В Python это можно сделать с помощью функции map()
в сочетании с функцией zip()
.
Вот как можно изменить ваш код для извлечения всех колонок:
arr = [[1, 2, 3], [3, 4, 5], [2, 3, 4]]
col = list(map(list, zip(*arr)))
print(col)
Если так хотите lambda
, то можно "сварганить" нечто подобное:
arr = [[1, 2, 3], [3, 4, 5], [2, 3, 4]]
# Получаем количество столбцов
num_cols = len(arr[0])
# Используем list comprehension и lambda для извлечения каждого столбца
cols = [list(map(lambda x: x[i], arr)) for i in range(num_cols)]
print(cols)
Вывод:
[[1, 3, 2], [2, 4, 3], [3, 5, 4]]