Matrisin vurulması xətti cəbrdə əsas əməliyyatdır.
Biz ümumiyyətlə onu görüntü emalı, maşın öyrənməsi və sair kimi çoxsaylı tətbiqlərdə istifadə edirik. NumPy elmi hesablamalar üçün diqqətəlayiq Python paketidir.
Bununla belə, bu yazıda biz NumPy-dən istifadə etmədən Python-da matris vurmağın müxtəlif üsullarına baxacağıq.
istifadə edəcəyik iç içə döngələr, daxili xəritə() funksiyası və siyahının başa düşülməsi.
Bundan əlavə, biz hər bir strategiyanın üstünlükləri və çatışmazlıqlarını, həmçinin onların hər birini nə vaxt tətbiq edəcəyimizi nəzərdən keçirəcəyik. Əgər xətti cəbrdə yenisinizsə və matris vurma haqqında daha çox öyrənmək istəyirsinizsə; oxumağa davam edin.
Matris vurma üsulunu harada istifadə edirik?
Matris vurma üsulundan istifadə olunur kompüter qrafika 2D və 3D vizualları dəyişdirmək üçün. Məsələn, siz ekranda obyektləri döndərə, ölçə və tərcümə edə bilərsiniz. Matrislər şəkilləri piksel massivləri kimi təqdim etmək üçün təsvirin emalında istifadə olunur. Bundan əlavə, matrislər görüntü filtri kimi əməliyyatları həyata keçirmək üçün istifadə edilə bilər.
Biz də matrislərdən istifadə edirik maşın təlim. Onlar bizə məlumat və model parametrlərini təqdim etməkdə kömək edə bilər. Nöqtə məhsulları və matris-vektor məhsullarının hesablanması kimi çoxsaylı əməliyyatlar həyata keçirə bilərik.
Şübhəsiz ki, bu əməliyyat elmi əməliyyatlarda da çox faydalıdır. Fiziki kəmiyyətləri təsvir etmək üçün fizika və mühəndislikdə istifadə edə bilərik. Beləliklə, vektorlar və tensorlarla işləyə bilərik.
Niyə NumPy istifadə etməyi seçməyə bilərik?
NumPy isə a Python kitabxanası, həmişə matrisin vurulması üçün ideal variant deyil. Ölçü və asılılıq, öyrənmə və köhnə sistemlər kimi səbəblərə görə NumPy-dən istifadə etməyi seçməyə bilərik.
Python-un daxili funksiyalarından istifadə etmək və ya xüsusi kodu inkişaf etdirmək bəzi hallarda daha səmərəli ola bilər. Bununla belə, NumPy-nin güclü bir kitabxana olduğunu qeyd etmək çox vacibdir. Bundan əlavə, siz matrisin vurulması üçün də istifadə edə bilərsiniz.
İndi gəlin NumPy olmadan matris vurulmasına necə nail ola biləcəyimizə nəzər salaq.
İç-içə döngələr üsulu
İç içə döngələr texnikası Python-da matrislərin çoxaldılmasını həyata keçirmək üçün iç içə döngələrdən istifadə edir. Funksiya hər bir matris elementi üzərində təkrarlanır. Və bir sıra iç-içə döngələrdən istifadə edərək onları çoxaldır. Funksiya yeni matrisdə saxlanılan nəticəni qaytarır.
Bu yanaşmanı başa düşmək asandır. Bununla belə, digər yollar kimi, xüsusən də daha böyük matrislər üçün effektiv olmaya bilər. Bununla belə, əgər xətti cəbrdə yenisinizsə, bu sizin üçün gözəl seçimdir.
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])
# Nəticə matrisini sıfıra təyin edin.
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
Bunun necə ediləcəyinə dair bir nümunə verək. Bu nümunəni yoxlamaq üçün sadəcə olaraq bu kod sətirlərini aşağıda əlavə edə bilərsiniz.
# 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]]
Faydaları:
- Anlamaq asan.
- Yeni başlayanlar və ya matris vurmağı daha dərindən başa düşmək istəyənlər üçün əladır.
Dezavantajları:
- Xüsusilə daha böyük matrislər üçün alternativ üsullar qədər effektiv deyil.
- Alternativ yanaşmalar kimi oxunaqlı deyil.
map() funksiyası metodu
map() funksiyası metodu Python-da matrislərin çoxaldılması üçün alternativ yanaşma təqdim edir. Bu yanaşmada biz daxili map() funksiyasından istifadə edirik. Beləliklə, biz hər bir təkrarlana bilən elementə (siyahı, tuple və s.) verilmiş funksiyanı tətbiq edən funksional proqramlaşdırma alətindən istifadə edirik. Həmçinin, map() funksiyası iki parametr qəbul edir, funksiya və təkrarlanan. Və o, funksiyanı hər bir təkrarlana bilən elementə tətbiq edən iteratoru qaytarır.
Bu yanaşmada biz matrisin hər bir üzvündən keçirik və nested map() funksiyasından istifadə edərək vurma əməliyyatını həyata keçiririk.
Zip() funksiyası matrislərin hər bir elementini paralel olaraq təkrarlamaq üçün istifadə olunur.
Nəhayət, nəticələri toplamaq üçün sum() funksiyasından istifadə olunur.
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
İndi yenə də kodumuzu bir nümunə ilə yoxlaya bilərik.
# 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]]
Üstünlüklər
- Yığılmış döngələr yanaşmasından daha təsirli
- Kodu daha sadə etmək üçün funksional proqramlaşdırmadan istifadə edir.
Dezavantajları
- Funksional proqramlaşdırma ilə tanış olmayan bəzi insanlar onu daha az oxunaqlı tapa bilər.
- Bu, iç-içə döngələr texnikasından daha az başa düşüləndir.
Siyahı anlama üsulu
Siyahının başa düşülməsi sizə bir kod sətirində yeni siyahı yaratmağa imkan verir. Beləliklə, bu, mövcud siyahının hər bir üzvünə ifadə tətbiq etməkdir.
Bu yanaşmada vurma hər bir matrisin üzvü vasitəsilə təkrar təkrarlama yolu ilə həyata keçirilir. Biz laylı siyahı anlayışından istifadə edirik.
# 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]]
Faydaları
- map() funksiyası metodu ilə müqayisədə daha qısa və daha oxunaqlıdır.
Dezavantajları
- Xüsusilə böyük matrislər üçün map() funksiyasından istifadə etməkdən daha az effektiv ola bilər.
- Bu, iç-içə döngələrin yanaşmasından daha çətindir.
Nəticə
Bu yazıda biz Python-da matrisləri vurarkən NumPy-dən istifadə etmək üçün alternativlərə baxdıq. Biz iç-içə döngələrdə matrisin çoxaldılması, daxili xəritə() funksiyası və siyahı başa düşülməsini həyata keçirdik.
Ən yaxşı strategiya layihənizin xüsusi ehtiyaclarına əsaslanacaqdır.
Strategiyaların hər birinin öz müsbət və mənfi tərəfləri var. Funksiyanın düzgün işlədiyinə əmin olmaq üçün müxtəlif matris ölçüləri və dəyərləri olan bəzi sınaq hallarını əlavə etmək yaxşı olar.
Bu metodların nə dərəcədə yaxşı işlədiyini müqayisə etmək üçün bəzi performans testlərini də daxil etməlisiniz.
Cavab yaz