Перекладіть матрицю в одній лінії в Python

Перенесення матриці в Python означає, що перегортає її по його діагоналі, перетворюючи всі ряди у стовпці та всі стовпці в рядки. Для Expresspl e матриця, як [[1 2] [3 4] [5 6]], яка має 3 ряди та 2 стовпці, стає [[1 3 5] [2 4 6]], яка має 2 ряди та 3 стовпці після перенесення. Давайте зрозуміємо різні методи зробити це ефективно.

Використання розуміння списку

Список розуміння використовується для ітерації через кожен елемент матриці. У заданому прикладі ми повторюємо через кожен елемент матриці (M) у стовпці-майорі і присвоюємо результат матриці Рез, яка є перенесеною m.

Python
   m   =   [[  1     2  ]   [  3     4  ]   [  5     6  ]]   res   =   [[  m  [  j  ][  i  ]   for   j   in   range  (  len  (  m  ))]   for   i   in   range  (  len  (  m  [  0  ]))]   for   row   in   res  :   print  (  row  )   

Випуск
[1 3 5] [2 4 6]  

Пояснення: Цей вираз створює нову матрицю, взявши кожен стовпець з оригіналу як ряд у новій. Він обмінюється рядами з стовпчиками.

У співати блискавки

Python Zip повертає ітератор кортежів, де I-т-корт містить елемент I-т з кожної з послідовностей аргументів або ітерелів. У цьому прикладі ми розпакуємо наш масив за допомогою *, а потім застібаємо його, щоб отримати транспозцію.

Python
   m   =   [(  1     2     3  )   (  4     5     6  )   (  7     8     9  )   (  10     11     12  )]   t_m   =   zip  (  *  m  )   for   row   in   t_m  :   print  (  row  )   

Випуск
(1 4 7 10) (2 5 8 11) (3 6 9 12)  

Пояснення: Цей код переносить матрицю м використання Zip (*m) . * Розпаковує рядки і Zip () Групи елементів колонки. Кожен вихідний кортеж являє собою стовпець із вихідної матриці, що ефективно замінює рядки та стовпці.

За допомогою numpy

Python Numpy-це пакет обробки масиву загального призначення, призначений для ефективного маніпулювання великими багатовимірними масивами.

Приклад 1: Метод Transpose повертає перенесений вигляд пропущеної багатовимірної матриці.

Python
   import   numpy   m   =   [[  1     2     3  ]   [  4     5     6  ]]   print  (  numpy  .  transpose  (  m  ))   

Випуск
[[1 4] [2 5] [3 6]]  

Пояснення: numpy.transpose () Поміняйте ряди та стовпці матриці m. Він перетворює вихідну матрицю 2 рядків і 3 стовпців в один з 3 рядами та 2 стовпцями, що ефективно перевозять його.

Приклад 2: Використання '.t' після змінної

Python
   import   numpy   as   np   m   =   np  .  array  ([[  1     2     3  ]   [  4     5     6  ]])   print  (  m  .  T  )   

Випуск
[[1 4] [2 5] [3 6]]  

Пояснення: Цей код використовує Numpy для створення 2D .T . З .T Атрибут замінюють рядки та стовпці, що перетворюють оригінальну матрицю 2x3 у матрицю, перенесену 3x2.

Використання itertools

Python itertools - це модуль, який забезпечує різні функції, які працюють над ітераторами для створення складних ітераторів. Chain () - це функція, яка приймає ряд ітерів і повертає одну ітере.

Python
   from   itertools   import   chain   import   time   import   numpy   as   np   def   transpose2  (  M  ):   M   =   M  .  tolist  ()   n   =   len  (  M  [  0  ])   L   =   list  (  chain  (  *  M  ))   return   [  L  [  i  ::  n  ]   for   i   in   range  (  n  )]   m   =   np  .  array  ([[  1     2     3  ]   [  4     5     6  ]])   start   =   time  .  time_ns  ()   res   =   transpose2  (  m  )   end   =   time  .  time_ns  ()   print  (  res  )   print  (  'Time taken'     end   -   start     'ns'  )   

Випуск
[[1 4] [2 5] [3 6]] Time taken 9813 ns  

Пояснення: Спочатку він перетворює матрицю в список списків, що спрямовує його в один список, використовуючи ланцюг (*м), а потім відновлює перенесену матрицю, нарізавши кожен N-ту елемент.

Пов’язані статті:

  • Список розуміння
  • Python itertools
  • Python Zip
  • ланцюг ()
  • кортеж
  • Python numpy