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.
Pythonm = [(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.
Pythonimport 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.
Pythonfrom 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