Ang matrix multiplication ay isang pangunahing operasyon sa linear algebra.
Karaniwan naming ginagamit ito sa maraming application gaya ng pagpoproseso ng imahe, machine learning, at marami pa. Ang NumPy ay isang kilalang Python package para sa scientific computing.
Gayunpaman, sa post na ito, titingnan natin ang iba't ibang mga pamamaraan para sa paggawa ng matrix multiplication sa Python nang hindi gumagamit ng NumPy.
Gagamitin natin naka-pugad na mga loop, ang built-in na mapa() function, at pag-unawa sa listahan.
Bilang karagdagan, titingnan natin ang mga benepisyo at kawalan ng bawat diskarte, pati na rin kung kailan ilalapat ang bawat isa sa kanila. Kung bago ka sa linear algebra at gustong matuto nang higit pa tungkol sa matrix multiplication; ipagpatuloy ang pagbabasa.
Saan Namin Gumagamit ng Matrix Multiplication?
Ginagamit ang matrix multiplication sa computer graphics para baguhin ang 2D at 3D visuals. Halimbawa, maaari mong paikutin, sukatin, at isalin ang mga bagay sa screen. Ginagamit ang mga matrix sa pagproseso ng imahe upang kumatawan sa mga larawan bilang mga array ng mga pixel. Bukod pa rito, maaaring gamitin ang mga matrix upang magsagawa ng mga operasyon tulad ng pag-filter ng imahe.
Gumagamit din kami ng mga matrix sa machine learning. Matutulungan kami ng mga ito na kumatawan sa mga parameter ng data at modelo. Maaari kaming magsagawa ng maraming operasyon, tulad ng pag-compute ng mga produkto ng tuldok at mga produkto ng matrix-vector.
Tiyak, ang operasyong ito ay lubos na kapaki-pakinabang sa mga pang-agham na operasyon. Magagamit natin ito sa physics at engineering para ilarawan ang mga pisikal na dami. Kaya, maaari tayong gumana gamit ang mga vector at tensor.
Bakit Hindi Namin Maaaring Piliin na Gamitin ang NumPy?
Habang ang NumPy ay isang Python library, hindi ito palaging ang perpektong opsyon para sa pagpaparami ng matrix. Maaaring hindi namin piliin na gamitin ang NumPy para sa mga kadahilanan tulad ng laki at dependency, pag-aaral, at mga legacy na system.
Ang paggamit ng mga built-in na function ng Python o pagbuo ng custom na code ay maaaring maging mas mahusay sa ilang pagkakataon. Mahalagang tandaan, gayunpaman, na ang NumPy ay isang malakas na aklatan. Bukod, maaari mo ring gamitin ito para sa pagpaparami ng matrix.
Ngayon, tingnan natin kung paano natin makakamit ang matrix multiplication nang walang NumPy.
Paraan ng nested loops
Gumagamit ang nested loops technique ng nested loops upang maisagawa ang matrix multiplication sa Python. Ang function ay umuulit sa bawat elemento ng matrix. At, pinaparami nito ang mga ito gamit ang isang serye ng mga nested loop. Ibinabalik ng function ang resulta, na nakaimbak sa isang bagong matrix.
Ang diskarte na ito ay diretsong maunawaan. Gayunpaman, maaaring hindi ito kasing episyente ng ibang mga paraan, lalo na para sa mas malalaking matrice. Gayunpaman, ito ay isang magandang pagpipilian para sa iyo kung ikaw ay bago sa linear algebra.
def matrix_multiplication(A, B):
# Determine the matrices' dimensions.
rows_A = len(A)
cols_A = len(A[0])
rows_B = len(B)
cols_B = len(B[0])
# Itakda ang resulta matrix sa mga zero.
result = [[0 for row in range(cols_B)] for col in
range(rows_A)]
# Iterate through rows of A
for s in range(rows_A):
# Iterate through columns of B
for j in range(cols_B):
# Iterate through rows of B
for k in range(cols_A):
result[s][j] += A[s][k] * B[k][j]
return result
Magkaroon tayo ng isang halimbawa kung paano ito gagawin. Maaari mo lamang idagdag ang mga linyang ito ng code sa ibaba upang subukan ang halimbawang ito.
# Sample matrices
A = [[1, 4, 3], [4, 9, 6]]
B = [[7, 8], [9, 10], [11, 12]]
# Perform matrix multiplication
result = matrix_multiplication(A, B)
# Print the result
print(result)
# Output: [[76, 84], [175, 194]]
Benepisyo:
- Madaling intindihin.
- Mahusay para sa mga baguhan o sa mga naghahanap ng mas malalim na pag-unawa sa matrix multiplication.
Disadvantages:
- Hindi kasing epektibo ng mga alternatibong pamamaraan, lalo na para sa mas malalaking matrice.
- Hindi ito nababasa gaya ng mga alternatibong diskarte.
map() function na paraan
Ang pamamaraan ng function na mapa() ay nagbibigay ng isang alternatibong diskarte para sa paggawa ng matrix multiplication sa Python. Sa diskarteng ito, ginagamit namin ang built-in na mapa() function. Kaya, gumagamit kami ng functional na tool sa programming na naglalapat ng ibinigay na function sa bawat iterable na elemento (listahan, tuple, atbp.). Gayundin, ang map() function ay tumatanggap ng dalawang parameter, isang function at isang iterable. At, nagbabalik ito ng iterator na naglalapat ng function sa bawat iterable na elemento.
Sa diskarteng ito, dumaan tayo sa bawat miyembro ng matrix at ginagawa ang multiplikasyon gamit ang nested map() function.
Ang zip() function ay ginagamit upang umulit sa bawat elemento ng mga matrice nang magkatulad.
Sa wakas, ang sum() function ay ginagamit upang magdagdag ng mga resulta.
def matrix_multiplication(A, B):
# To get the dimensions of the matrices
rows_A = len(A)
cols_A = len(A[0])
rows_B = len(B)
cols_B = len(B[0])
# We use map() function for multiplication.
result = [[sum(a * b for a, b in zip(row_a, col_b)) for
col_b in zip(*B)] for row_a in A]
return result
Ngayon, muli, maaari naming subukan ang aming code sa isang halimbawa.
# Example matrices
A = [[3, 2, 3], [4, 5, 6]]
B = [[7, 8], [9, 10], [11, 12]]
# Use map() function to perform matrix multiplication
result = list(map(lambda x: list(map(lambda y: sum(i*j
for i,j in zip(x,y)), zip(*B))), A))
# Print the result
print(result)
# Output: [[72, 80], [139, 154]]
Bentahe
- Mas epektibo kaysa sa stacked loops approach
- Gumagamit ito ng functional programming para gawing mas simple ang code.
Mga Disbentaha
- Ang ilang mga tao na hindi pamilyar sa functional programming ay maaaring makitang hindi gaanong nababasa.
- Ito ay hindi gaanong naiintindihan kaysa sa nested loops technique.
Ilista ang paraan ng pag-unawa
Nagbibigay-daan sa iyo ang pag-unawa sa listahan na makabuo ng bagong listahan sa isang linya ng code. Samakatuwid, ito ay sa pamamagitan ng paglalapat ng isang expression sa bawat miyembro ng isang umiiral na listahan.
Sa pamamaraang ito, ang pagpaparami ay isinasagawa sa pamamagitan ng paulit-ulit na pag-ulit sa bawat miyembro ng matrix. Gumagamit kami ng layered list comprehension.
# Sample matrices
A = [[1, 12, 3], [14, 5, 6]]
B = [[7, 8], [9, 10], [12, 12]]
# Matrix multiplication using list comprehension
result = [[sum(A[i][k] * B[k][j] for k in range(len(A[0])))
for j in range(len(B[0]))] for i in range(len(A))]
# Print the result
print(result)
[[151, 164], [215, 234]]
Mga Benepisyo
- Kung ikukumpara sa map() function method, mas maikli at mas nababasa.
Mga Disbentaha
- Ito ay maaaring hindi gaanong epektibo kaysa sa paggamit ng mapa() function, lalo na para sa malalaking matrice.
- Ito ay mas mahirap kaysa sa nested loops approach.
Konklusyon
Sa post na ito, tumingin kami sa mga alternatibo sa paggamit ng NumPy kapag nagpaparami ng mga matrice sa Python. Nagsagawa kami ng matrix multiplication sa mga nested loop, ang built-in na mapa() function, at pag-unawa sa listahan.
Ang pinakamahusay na diskarte ay umaasa sa mga partikular na pangangailangan ng iyong proyekto.
Ang bawat isa sa mga diskarte ay may sariling mga kalamangan at kahinaan. Para matiyak na gumagana nang maayos ang function, magandang ideya na magdagdag ng ilang test case na may iba't ibang dimensyon at value ng matrix.
Dapat mo ring isama ang ilang mga pagsubok sa pagganap upang ihambing kung gaano kahusay ang pagpapatupad ng mga pamamaraang ito.
Mag-iwan ng Sagot