Быстрое преобразование матрицы в Python - PullRequest
4 голосов
/ 27 мая 2010

Есть ли быстрый способ сделать транспонирование прямоугольной 2D-матрицы в Python (не включая импорт из библиотеки).?

Скажите, если у меня есть массив

X=[ [1,2,3],
    [4,5,6] ]

Мне нужен массив Y, который должен быть транспонированной версией X, поэтому

Y=[ [1,4],
    [2,5],
    [3,6] ] 

Ответы [ 3 ]

19 голосов
/ 27 мая 2010

Простой: Y = почтовый индекс (* X)

>>> X=[[1,2,3], [4,5,6]]
>>> Y=zip(*X)
>>> Y
[(1, 4), (2, 5), (3, 6)]

РЕДАКТИРОВАТЬ: чтобы ответить на вопросы в комментариях о том, что означает zip (* X), ​​вот пример из руководства по Python:

>>> range(3, 6)             # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args)            # call with arguments unpacked from a list
[3, 4, 5]

Итак, когда X равно [[1,2,3], [4,5,6]], zip(*X) равно zip([1,2,3], [4,5,6])

6 голосов
/ 27 мая 2010
>>> X = [1,2,3], [4,5,6]]
>>> zip(*X)
[(1,4), (2,5), (3,6)]
>>> [list(tup) for tup in zip(*X)]
[[1,4], [2,5], [3,6]]

Если внутренние пары обязательно должны быть списками, переходите ко второму.

5 голосов
/ 27 мая 2010

Если вы работаете с матрицами, вы почти наверняка должны использовать numpy . Это будет выполнять числовые операции проще и эффективнее, чем чистый код Python.

>>> x = [[1,2,3], [4,5,6]]
>>> x = numpy.array(x)
>>> x
array([[1, 2, 3],
       [4, 5, 6]])
>>> x.T
array([[1, 4],
       [2, 5],
       [3, 6]])

«не включать импорт любой библиотеки» - глупое непродуктивное требование.

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