logo

Python'da bir matrisi Tek satırda transpoze etme

Python'da bir matrisin transkripsiyonunu yapmak, onu köşegeninin üzerinden çevirerek tüm satırları sütunlara ve tüm sütunları satırlara dönüştürmek anlamına gelir. örneğin e 3 satırı ve 2 sütunu olan [[1 2] [3 4] [5 6]] gibi bir matris, yer değiştirme sonrasında 2 satırı ve 3 sütunu olan [[1 3 5] [2 4 6]] olur. Bunu verimli bir şekilde yapmanın farklı yöntemlerini anlayalım.

Liste Anlamayı Kullanma

Liste kavrama, matristeki her öğeyi yinelemek için kullanılır. Verilen örnekte, (m) matrisinin her bir elemanını ana sütun tarzında yineliyoruz ve sonucu, m'nin devriği olan rez matrisine atadık.



C dilinde matris programı
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) 

Çıkış
[1 3 5] [2 4 6] 

Açıklama: Bu ifade orijinaldeki her sütunu yenisinde satır olarak alarak yeni bir matris oluşturur. Satırları sütunlarla değiştirir.

İÇİNDE zip söylemek

Python Zip, i'inci demetin, argüman dizilerinin veya yinelenebilirlerin her birinden i'inci öğeyi içerdiği bir demet yineleyicisini döndürür. Bu örnekte dizimizi * kullanarak açıyoruz ve ardından devriği elde etmek için sıkıştırıyoruz.

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) 

Çıkış
(1 4 7 10) (2 5 8 11) (3 6 9 12) 

Açıklama: Bu kod matrisin transpozisyonunu yapar M kullanarak zip(*m) . * satırları açar ve zip() öğeleri sütun bazında gruplandırır. Her çıktı dizisi, orijinal matristen etkili bir şekilde satır ve sütunları değiştiren bir sütunu temsil eder.



NumPy'yi kullanma

Python NumPy, büyük, çok boyutlu dizileri verimli bir şekilde işlemek için tasarlanmış genel amaçlı bir dizi işleme paketidir.

Örnek 1: Transpoze yöntemi, geçirilen çok boyutlu matrisin transpoze edilmiş bir görünümünü döndürür.

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

Çıkış
[[1 4] [2 5] [3 6]] 

Açıklama: numpy.transpose() m matrisinin satır ve sütunlarının yerini değiştirin. 2 satır ve 3 sütundan oluşan orijinal matrisi, etkili bir şekilde transpoze ederek 3 satır ve 2 sütunlu bir matrise dönüştürür.



Örnek 2: Değişkenden sonra '.T' kullanılması

kabuk komut dosyasındaki for döngüsü
Python
import numpy as np m = np.array([[1 2 3] [4 5 6]]) print(m.T) 

Çıkış
[[1 4] [2 5] [3 6]] 

Açıklama: Bu kod, 2 boyutlu bir m dizisi oluşturmak için NumPy'yi kullanır ve ardından kullanarak devrini yazdırır. .T . .T özellik, orijinal 2x3 matrisi 3x2 aktarılmış matrise dönüştürerek satırları ve sütunları değiştirir.

Itertools'u kullanma

Python itertools, karmaşık yineleyiciler üretmek için yineleyiciler üzerinde çalışan çeşitli işlevler sağlayan bir modüldür. Chain(), bir dizi yinelenebiliri alan ve bir yinelenebiliri döndüren bir işlevdir.

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') 

Çıkış
[[1 4] [2 5] [3 6]] Time taken 9813 ns 

Açıklama: İlk önce matrisi bir liste listesine dönüştürür, zincir(*M) kullanarak onu tek bir liste halinde düzleştirir, ardından her n'inci elemanı dilimleyerek aktarılan matrisi yeniden oluşturur.

İlgili makaleler:

  • Liste anlama
  • Python yineleme araçları
  • Python Posta Kodu
  • zincir()
  • demetler
  • Python NumPy