Kami akan menulis program Python untuk mendapatkan perkalian dari dua matriks input dan mencetak hasilnya dalam output. Program Python ini menentukan cara mengalikan dua matriks, memiliki beberapa nilai tertentu
Sebelum menulis program Python, mari kita lihat dulu gambaran umum tentang perkalian dua matriks
perkalian matriks
Perkalian matriks adalah operasi biner yang menggunakan sepasang matriks untuk menghasilkan matriks lain. Unsur-unsur dalam matriks dikalikan menurut aritmatika dasar
Pada perkalian dua matriks, elemen baris dari matriks pertama dikalikan dengan elemen kolom dari matriks kedua.
Contoh. Misalkan kita telah memberikan dua matriks A dan B berikut
C adalah penjumlahan dari dua matriks di atas, i. e. , C = A+B, dan karenanya C seharusnya
Seperti yang dapat kita lihat bahwa matriks C yang dihasilkan, yang juga dikenal sebagai produk matriks, memiliki jumlah baris yang sama dengan matriks pertama [matriks A] dan jumlah kolom yang sama dengan matriks kedua [matriks B]. Perkalian matriks jenis ini juga dikenal sebagai perkalian titik matriks
Perkalian dua matriks
Sekarang, kita akan menulis program Python untuk perkalian dua matriks di mana kita melakukan perkalian seperti yang telah kita lakukan pada contoh yang diberikan di atas. Kita dapat menggunakan berbagai metode untuk menulis program Python seperti ini, namun dalam tutorial ini, kita hanya akan menggunakan dua metode berikut
- Menggunakan metode nested for loop
- Menggunakan metode pemahaman daftar bersarang
Dalam kedua metode tersebut, kami akan menulis contoh program untuk memahami implementasinya untuk mengalikan dua matriks
Metode 1. Menggunakan metode nested for loop
Dalam metode ini, kita akan menggunakan perulangan for bersarang pada dua matriks dan melakukan perkalian pada matriks tersebut dan menyimpan hasil perkalian pada matriks ketiga sebagai nilai hasil.
Mari kita pahami penerapan metode ini melalui contoh berikut
Contoh. Perhatikan program Python berikut
Keluaran
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]
Metode 2. Menggunakan metode pemahaman daftar bersarang
Dalam metode ini, kita akan menggunakan pemahaman daftar bersarang untuk mendapatkan hasil perkalian dari dua matriks masukan. Saat menggunakan metode pemahaman daftar dalam program, kami juga akan menggunakan 'zip dengan Python' pada daftar bersarang. Mari kita pahami penerapan metode ini melalui contoh berikut
Anda akan mulai dengan mempelajari kondisi perkalian matriks yang valid dan menulis fungsi Python kustom untuk mengalikan matriks. Selanjutnya, Anda akan melihat bagaimana Anda dapat mencapai hasil yang sama menggunakan pemahaman daftar bersarang
Terakhir, Anda akan melanjutkan menggunakan NumPy dan fungsi bawaannya untuk melakukan perkalian matriks dengan lebih efisien
Sebelum menulis kode Python untuk perkalian matriks, mari kita lihat kembali dasar-dasar perkalian matriks
Perkalian Matriks antara dua matriks A dan B hanya valid jika jumlah kolom matriks A sama dengan jumlah baris matriks B
Anda mungkin pernah menemukan kondisi ini untuk perkalian matriks sebelumnya. Namun, pernahkah Anda bertanya-tanya mengapa ini terjadi?
Yah, itu karena cara kerja perkalian matriks. Lihatlah gambar di bawah ini
Dalam contoh umum kita, matriks A memiliki m baris dan n kolom. Dan matriks B memiliki n baris dan p kolom
Apa Bentuk Matriks Produk?
Elemen pada indeks [i,j] pada resultan matriks C adalah perkalian titik dari baris ke-i dari matriks A, dan kolom j dari matriks B
Jadi untuk mendapatkan elemen pada indeks tertentu dalam matriks C yang dihasilkan, Anda harus menghitung produk titik dari baris dan kolom yang sesuai dalam matriks A dan B, masing-masing.
Mengulangi proses di atas, Anda akan mendapatkan produk matriks C dengan bentuk m x p—dengan m baris dan p kolom, seperti yang ditunjukkan di bawah ini
Dan perkalian titik atau perkalian dalam antara dua vektor a dan b diberikan oleh persamaan berikut
Mari kita rangkum sekarang
- Jelaslah bahwa perkalian titik hanya didefinisikan antara vektor-vektor dengan panjang yang sama
- Jadi, agar perkalian titik antara baris dan kolom menjadi valid—ketika mengalikan dua matriks—Anda membutuhkan keduanya memiliki jumlah elemen yang sama
- Dalam contoh umum di atas, setiap baris dalam matriks A memiliki n elemen. Dan setiap kolom dalam matriks B juga memiliki n elemen
Jika Anda perhatikan lebih dekat, n adalah jumlah kolom dalam matriks A, dan juga jumlah baris dalam matriks B. Dan inilah alasan mengapa Anda membutuhkan jumlah kolom dalam matriks A sama dengan jumlah baris dalam matriks B
Saya harap Anda memahami syarat agar perkalian matriks valid dan cara mendapatkan setiap elemen dalam matriks perkalian
Mari lanjutkan menulis beberapa kode Python untuk mengalikan dua matriks
Tulis Fungsi Python Khusus untuk Mengalikan Matriks
Sebagai langkah pertama, mari kita tulis fungsi khusus untuk mengalikan matriks
Fungsi ini harus melakukan hal berikut
- Terima dua matriks, A dan B, sebagai input
- Periksa apakah perkalian matriks antara A dan B valid
- Jika valid, kalikan dua matriks A dan B, dan kembalikan matriks hasil kali C
- Jika tidak, kembalikan pesan kesalahan bahwa matriks A dan B tidak dapat dikalikan
Langkah 1. Hasilkan dua matriks bilangan bulat menggunakan fungsi
def multiply_matrix[A,B]:
global C
if A.shape[1] == B.shape[0]:
C = np.zeros[[A.shape[0],B.shape[1]],dtype = int]
for row in range[rows]:
for col in range[cols]:
for elt in range[len[B]]:
C[row, col] += A[row, elt] * B[elt, col]
return C
else:
return "Sorry, cannot multiply A and B."
1 NumPy. Anda juga dapat mendeklarasikan matriks sebagai daftar Python bersarangimport numpy as np
np.random.seed[27]
A = np.random.randint[1,10,size = [3,3]]
B = np.random.randint[1,10,size = [3,2]]
print[f"Matrix A:\n {A}\n"]
print[f"Matrix B:\n {B}\n"]
# Output
Matrix A:
[[4 9 9]
[9 1 6]
[9 2 3]]
Matrix B:
[[2 2]
[5 7]
[4 4]]
Langkah 2. Lanjutkan dan tentukan fungsi
def multiply_matrix[A,B]:
global C
if A.shape[1] == B.shape[0]:
C = np.zeros[[A.shape[0],B.shape[1]],dtype = int]
for row in range[rows]:
for col in range[cols]:
for elt in range[len[B]]:
C[row, col] += A[row, elt] * B[elt, col]
return C
else:
return "Sorry, cannot multiply A and B."
2. Fungsi ini mengambil dua matriks def multiply_matrix[A,B]:
global C
if A.shape[1] == B.shape[0]:
C = np.zeros[[A.shape[0],B.shape[1]],dtype = int]
for row in range[rows]:
for col in range[cols]:
for elt in range[len[B]]:
C[row, col] += A[row, elt] * B[elt, col]
return C
else:
return "Sorry, cannot multiply A and B."
_3 dan def multiply_matrix[A,B]:
global C
if A.shape[1] == B.shape[0]:
C = np.zeros[[A.shape[0],B.shape[1]],dtype = int]
for row in range[rows]:
for col in range[cols]:
for elt in range[len[B]]:
C[row, col] += A[row, elt] * B[elt, col]
return C
else:
return "Sorry, cannot multiply A and B."
4 sebagai input dan mengembalikan matriks produk def multiply_matrix[A,B]:
global C
if A.shape[1] == B.shape[0]:
C = np.zeros[[A.shape[0],B.shape[1]],dtype = int]
for row in range[rows]:
for col in range[cols]:
for elt in range[len[B]]:
C[row, col] += A[row, elt] * B[elt, col]
return C
else:
return "Sorry, cannot multiply A and B."
5 jika perkalian matriks validdef multiply_matrix[A,B]:
global C
if A.shape[1] == B.shape[0]:
C = np.zeros[[A.shape[0],B.shape[1]],dtype = int]
for row in range[rows]:
for col in range[cols]:
for elt in range[len[B]]:
C[row, col] += A[row, elt] * B[elt, col]
return C
else:
return "Sorry, cannot multiply A and B."
_Mem-parsing Definisi Fungsi
Mari kita lanjutkan untuk mengurai definisi fungsi
Deklarasikan C sebagai variabel global. Secara default, semua variabel di dalam fungsi Python memiliki cakupan lokal. Dan Anda tidak dapat mengaksesnya dari luar fungsi. Agar matriks produk C dapat diakses dari luar, kita harus mendeklarasikannya sebagai variabel global. Cukup tambahkan kualifikasi
def multiply_matrix[A,B]:
global C
if A.shape[1] == B.shape[0]:
C = np.zeros[[A.shape[0],B.shape[1]],dtype = int]
for row in range[rows]:
for col in range[cols]:
for elt in range[len[B]]:
C[row, col] += A[row, elt] * B[elt, col]
return C
else:
return "Sorry, cannot multiply A and B."
_6 sebelum nama variabelPeriksa apakah perkalian matriks valid. Gunakan atribut
def multiply_matrix[A,B]:
global C
if A.shape[1] == B.shape[0]:
C = np.zeros[[A.shape[0],B.shape[1]],dtype = int]
for row in range[rows]:
for col in range[cols]:
for elt in range[len[B]]:
C[row, col] += A[row, elt] * B[elt, col]
return C
else:
return "Sorry, cannot multiply A and B."
_7 untuk memeriksa apakah A dan B dapat dikalikan. Untuk sembarang larik def multiply_matrix[A,B]:
global C
if A.shape[1] == B.shape[0]:
C = np.zeros[[A.shape[0],B.shape[1]],dtype = int]
for row in range[rows]:
for col in range[cols]:
for elt in range[len[B]]:
C[row, col] += A[row, elt] * B[elt, col]
return C
else:
return "Sorry, cannot multiply A and B."
_8, def multiply_matrix[A,B]:
global C
if A.shape[1] == B.shape[0]:
C = np.zeros[[A.shape[0],B.shape[1]],dtype = int]
for row in range[rows]:
for col in range[cols]:
for elt in range[len[B]]:
C[row, col] += A[row, elt] * B[elt, col]
return C
else:
return "Sorry, cannot multiply A and B."
9 dan multiply_matrix[A,B]
# Output
array[[[ 89, 107],
[ 47, 49],
[ 40, 44]]]
0 berikan masing-masing jumlah baris dan kolom. Jadi multiply_matrix[A,B]
# Output
array[[[ 89, 107],
[ 47, 49],
[ 40, 44]]]
_1 memeriksa apakah perkalian matriks valid. Hanya jika kondisi ini adalah multiply_matrix[A,B]
# Output
array[[[ 89, 107],
[ 47, 49],
[ 40, 44]]]
_2, matriks perkalian akan dihitung. Jika tidak, fungsi mengembalikan pesan kesalahanGunakan loop bersarang untuk menghitung nilai. Untuk menghitung elemen-elemen dari matriks yang dihasilkan, kita harus mengulang melalui baris matriks A, dan loop
multiply_matrix[A,B]
# Output
array[[[ 89, 107],
[ 47, 49],
[ 40, 44]]]
3 luar melakukan ini. Lingkaran dalam multiply_matrix[A,B]
# Output
array[[[ 89, 107],
[ 47, 49],
[ 40, 44]]]
_3 membantu kita mengulang melalui kolom matriks B. Dan loop multiply_matrix[A,B]
# Output
array[[[ 89, 107],
[ 47, 49],
[ 40, 44]]]
_3 terdalam membantu mengakses setiap elemen di kolom yang dipilih▶️ Sekarang setelah kita mempelajari cara kerja fungsi Python untuk mengalikan matriks, mari kita panggil fungsi dengan matriks A dan B yang telah kita buat sebelumnya
multiply_matrix[A,B]
# Output
array[[[ 89, 107],
[ 47, 49],
[ 40, 44]]]
Karena perkalian matriks antara A dan B valid, fungsi
multiply_matrix[A,B]
# Output
array[[[ 89, 107],
[ 47, 49],
[ 40, 44]]]
6 mengembalikan matriks produk CGunakan Pemahaman Daftar Bersarang Python untuk Mengalikan Matriks
Di bagian sebelumnya, Anda menulis fungsi Python untuk mengalikan matriks. Sekarang, Anda akan melihat bagaimana Anda dapat menggunakan pemahaman daftar bersarang untuk melakukan hal yang sama
Berikut pemahaman daftar bersarang untuk mengalikan matriks
Pada awalnya, ini mungkin terlihat rumit. Tapi kami akan mengurai pemahaman daftar bersarang langkah demi langkah
Mari fokus pada satu pemahaman daftar pada satu waktu dan identifikasi apa fungsinya
Kami akan menggunakan template umum berikut untuk pemahaman daftar
[ for in ]
where,
: what you'd like to do—expression or operation
: each item you'd like to perform the operation on
: the iterable [list, tuple, etc.] that you're looping through
▶️ Lihat panduan Daftar Pemahaman kami dengan Python – dengan Contoh untuk mendapatkan pemahaman mendalam
Sebelum melanjutkan, perhatikan bahwa kita ingin membangun matriks resultan C satu baris pada satu waktu
Pemahaman Daftar Bersarang Dijelaskan
Langkah 1. Hitung satu nilai dalam matriks C
Diberi baris i matriks A dan kolom j matriks B, ekspresi di bawah ini memberikan entri pada indeks [i, j] dalam matriks C
sum[a*b for a,b in zip[A_row, B_col]
# zip[A_row, B_col] returns an iterator of tuples
# If A_row = [a1, a2, a3] & B_col = [b1, b2, b3]
# zip[A_row, B_col] returns [a1, b1], [a2, b2], and so on
Jika
multiply_matrix[A,B]
# Output
array[[[ 89, 107],
[ 47, 49],
[ 40, 44]]]
_7, ekspresi akan mengembalikan entri multiply_matrix[A,B]
# Output
array[[[ 89, 107],
[ 47, 49],
[ 40, 44]]]
8 dari matriks C. Jadi Anda bisa mendapatkan satu elemen dalam satu baris dengan cara iniLangkah 2. Bangun satu baris dalam matriks C
Tujuan kami selanjutnya adalah membangun seluruh baris
Untuk baris 1 dalam matriks A, Anda harus mengulang semua kolom dalam matriks B untuk mendapatkan satu baris lengkap dalam matriks C
Kembali ke templat pemahaman daftar
- Ganti
_9 dengan ekspresi dari langkah 1, karena itulah yang ingin Anda lakukanmultiply_matrix[A,B] # Output array[[[ 89, 107], [ 47, 49], [ 40, 44]]]
- Selanjutnya, ganti
_9 denganmultiply_matrix[A,B] # Output array[[[ 89, 107], [ 47, 49], [ 40, 44]]]
1—setiap kolom dalam matriks B[ for in ] where, : what you'd like to do—expression or operation : each item you'd like to perform the operation on : the iterable [list, tuple, etc.] that you're looping through
- Terakhir, ganti
_9 denganmultiply_matrix[A,B] # Output array[[[ 89, 107], [ 47, 49], [ 40, 44]]]
3—daftar yang berisi semua kolom dalam matriks B[ for in ] where, : what you'd like to do—expression or operation : each item you'd like to perform the operation on : the iterable [list, tuple, etc.] that you're looping through
Dan inilah pemahaman daftar pertama
[sum[a*b for a,b in zip[A_row, B_col]] for B_col in zip[*B]]
# zip[*B]: * is the unzipping operator
# zip[*B] returns a list of columns in matrix B
Langkah 3. Bangun semua baris dan dapatkan matriks C
Selanjutnya, Anda harus mengisi matriks produk C dengan menghitung sisa baris
Dan untuk ini, Anda harus mengulang semua baris dalam matriks A
Kembali ke pemahaman daftar lagi, dan lakukan hal berikut
- Ganti
_9 dengan pemahaman daftar dari langkah 2. Ingatlah bahwa kami menghitung seluruh baris pada langkah sebelumnyamultiply_matrix[A,B] # Output array[[[ 89, 107], [ 47, 49], [ 40, 44]]]
- Sekarang, ganti
9 denganmultiply_matrix[A,B] # Output array[[[ 89, 107], [ 47, 49], [ 40, 44]]]
6—setiap baris dalam matriks A[ for in ] where, : what you'd like to do—expression or operation : each item you'd like to perform the operation on : the iterable [list, tuple, etc.] that you're looping through
- Dan
_9 Anda adalah matriks A itu sendiri, saat Anda mengulang barisnyamultiply_matrix[A,B] # Output array[[[ 89, 107], [ 47, 49], [ 40, 44]]]
Dan inilah pemahaman daftar bersarang terakhir kami. 🎊
[[sum[a*b for a,b in zip[A_row, B_col]] for B_col in zip[*B]]
for A_row in A]
Saatnya untuk memverifikasi hasilnya. ✔
# cast into NumPy array using np.array[]
C = np.array[[[sum[a*b for a,b in zip[A_row, B_col]] for B_col in zip[*B]]
for A_row in A]]
# Output:
[[ 89 107]
[ 47 49]
[ 40 44]]
Jika Anda melihat lebih dekat, ini setara dengan for loop bersarang yang kita miliki sebelumnya—hanya saja lebih ringkas
Anda juga dapat melakukan ini dengan lebih efisien menggunakan beberapa fungsi bawaan. Mari pelajari tentang mereka di bagian selanjutnya
Gunakan NumPy matmul[] untuk Mengalikan Matriks dengan Python
The
[ for in ]
where,
: what you'd like to do—expression or operation
: each item you'd like to perform the operation on
: the iterable [list, tuple, etc.] that you're looping through
_8 mengambil dua matriks sebagai input dan mengembalikan produk jika perkalian matriks antara matriks input validC = np.matmul[A,B]
print[C]
# Output:
[[ 89 107]
[ 47 49]
[ 40 44]]
Perhatikan bagaimana metode ini lebih sederhana daripada dua metode yang telah kita pelajari sebelumnya. Faktanya, alih-alih
[ for in ]
where,
: what you'd like to do—expression or operation
: each item you'd like to perform the operation on
: the iterable [list, tuple, etc.] that you're looping through
8, Anda dapat menggunakan operator @ yang setara, dan kami akan segera melihatnyaCara Menggunakan @ Operator dengan Python untuk Mengalikan Matriks
Dalam Python,
sum[a*b for a,b in zip[A_row, B_col]
# zip[A_row, B_col] returns an iterator of tuples
# If A_row = [a1, a2, a3] & B_col = [b1, b2, b3]
# zip[A_row, B_col] returns [a1, b1], [a2, b2], and so on
_0 adalah operator biner yang digunakan untuk perkalian matriksIni beroperasi pada dua matriks, dan secara umum, NumPy array N-dimensi, dan mengembalikan matriks produk
Catatan. Anda harus memiliki Python 3. 5 dan yang lebih baru untuk menggunakan operator
0sum[a*b for a,b in zip[A_row, B_col] # zip[A_row, B_col] returns an iterator of tuples # If A_row = [a1, a2, a3] & B_col = [b1, b2, b3] # zip[A_row, B_col] returns [a1, b1], [a2, b2], and so on
Inilah cara Anda dapat menggunakannya
C = A@B
print[C]
# Output
array[[[ 89, 107],
[ 47, 49],
[ 40, 44]]]
Perhatikan bahwa perkalian matriks C sama dengan yang kita dapatkan sebelumnya
Bisakah Anda Menggunakan np. dot[] untuk Mengalikan Matriks?
Jika Anda pernah menemukan kode yang menggunakan
sum[a*b for a,b in zip[A_row, B_col]
# zip[A_row, B_col] returns an iterator of tuples
# If A_row = [a1, a2, a3] & B_col = [b1, b2, b3]
# zip[A_row, B_col] returns [a1, b1], [a2, b2], and so on
2 untuk mengalikan dua matriks, inilah cara kerjanyadef multiply_matrix[A,B]:
global C
if A.shape[1] == B.shape[0]:
C = np.zeros[[A.shape[0],B.shape[1]],dtype = int]
for row in range[rows]:
for col in range[cols]:
for elt in range[len[B]]:
C[row, col] += A[row, elt] * B[elt, col]
return C
else:
return "Sorry, cannot multiply A and B."
_0Anda akan melihat bahwa
sum[a*b for a,b in zip[A_row, B_col]
# zip[A_row, B_col] returns an iterator of tuples
# If A_row = [a1, a2, a3] & B_col = [b1, b2, b3]
# zip[A_row, B_col] returns [a1, b1], [a2, b2], and so on
_3 juga mengembalikan matriks produk yang diharapkanNamun, sesuai dokumen NumPy, Anda harus menggunakan
sum[a*b for a,b in zip[A_row, B_col]
# zip[A_row, B_col] returns an iterator of tuples
# If A_row = [a1, a2, a3] & B_col = [b1, b2, b3]
# zip[A_row, B_col] returns [a1, b1], [a2, b2], and so on
2 hanya untuk menghitung produk titik dari dua vektor satu dimensi dan bukan untuk perkalian matriksIngat dari bagian sebelumnya, elemen pada indeks [i, j] dari perkalian matriks C adalah perkalian titik dari baris ke-i dari matriks A, dan kolom j dari matriks B
Saat NumPy secara implisit menyiarkan operasi produk titik ini ke semua baris dan semua kolom, Anda mendapatkan matriks produk yang dihasilkan. Tetapi agar kode Anda tetap dapat dibaca dan menghindari ambiguitas, gunakan
[ for in ]
where,
: what you'd like to do—expression or operation
: each item you'd like to perform the operation on
: the iterable [list, tuple, etc.] that you're looping through
8 atau operator sum[a*b for a,b in zip[A_row, B_col]
# zip[A_row, B_col] returns an iterator of tuples
# If A_row = [a1, a2, a3] & B_col = [b1, b2, b3]
# zip[A_row, B_col] returns [a1, b1], [a2, b2], and so on
0 sebagai gantinyaKesimpulan
🎯 Dalam tutorial ini, Anda telah mempelajari hal berikut
- Kondisi untuk perkalian matriks menjadi valid. jumlah kolom matriks A = jumlah baris matriks B
- Cara menulis fungsi Python khusus yang memeriksa apakah perkalian matriks valid dan mengembalikan matriks produk. Tubuh fungsi menggunakan loop for bersarang
- Selanjutnya, Anda belajar cara menggunakan pemahaman daftar bersarang untuk mengalikan matriks. Mereka lebih ringkas daripada untuk loop tetapi rentan terhadap masalah keterbacaan
- Terakhir, Anda belajar menggunakan fungsi bawaan NumPy np. matmul[] untuk mengalikan matriks dan cara ini paling efisien dalam hal kecepatan
- Anda juga belajar tentang operator @ untuk mengalikan dua matriks dengan Python
Dan itu mengakhiri diskusi kita tentang perkalian matriks dengan Python. Sebagai langkah selanjutnya, pelajari cara memeriksa apakah suatu bilangan prima dengan Python. Atau selesaikan masalah menarik pada string Python