Dengan Python, kita dapat mengimplementasikan matriks sebagai daftar bersarang (daftar di dalam daftar).
Kita dapat memperlakukan setiap elemen sebagai baris matriks.
Sebagai contoh X = [[1, 2], [4, 5], [3, 6]]
akan mewakili a 3x2
matriks.
Baris pertama dapat dipilih sebagai X[0]
. Dan, elemen di baris pertama, kolom pertama dapat dipilih sebagai X[0][0]
.
Perkalian dua matriks X dan Y didefinisikan hanya jika jumlah kolom dalam X sama dengan jumlah baris Y.
Jika X adalah n x m
matriks dan Y adalah m x l
matriks kemudian, XY didefinisikan dan memiliki dimensi n x l
(tapi YX tak terdefinisi). Berikut adalah beberapa cara untuk mengimplementasikan perkalian matriks dengan Python.
Kode Sumber: Perkalian Matriks dengan Nested Loop
# Program to multiply two matrices using nested loops
# 3x3 matrix
X = [[12,7,3],
[4 ,5,6],
[7 ,8,9]]
# 3x4 matrix
Y = [[5,8,1,2],
[6,7,3,0],
[4,5,9,1]]
# result is 3x4
result = [[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
# iterate through rows of X
for i in range(len(X)):
# iterate through columns of Y
for j in range(len(Y[0])):
# iterate through rows of Y
for k in range(len(Y)):
result[i][j] += X[i][k] * Y[k][j]
for r in result:
print(r)
Keluaran
[114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23]
Dalam program ini, kami telah menggunakan nested for
loop untuk mengulangi setiap baris dan setiap kolom. Kami mengumpulkan jumlah produk dalam hasil.
Teknik ini sederhana tetapi mahal secara komputasi karena kita meningkatkan urutan matriks.
Untuk operasi matriks yang lebih besar, kami merekomendasikan paket perangkat lunak yang dioptimalkan seperti NumPy yang beberapa (di urutan 1000) kali lebih cepat daripada kode di atas.
Kode Sumber: Perkalian Matriks Menggunakan Pemahaman Daftar Bersarang
# Program to multiply two matrices using list comprehension
# 3x3 matrix
X = [[12,7,3],
[4 ,5,6],
[7 ,8,9]]
# 3x4 matrix
Y = [[5,8,1,2],
[6,7,3,0],
[4,5,9,1]]
# result is 3x4
result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X]
for r in result:
print(r)
Output dari program ini sama seperti di atas. Untuk memahami kode di atas kita harus terlebih dahulu mengetahui tentang fungsi built-in zip()
dan membongkar daftar argumen menggunakan operator *.
Kami telah menggunakan pemahaman daftar bersarang untuk melakukan iterasi melalui setiap elemen dalam matriks. Kode awalnya terlihat rumit dan tidak dapat dibaca. Tetapi setelah Anda memahami pemahaman daftar, Anda mungkin tidak akan kembali ke loop bersarang.