Множењето на матрицата е основна операција во линеарната алгебра.
Генерално го користиме во бројни апликации како што се обработка на слики, машинско учење и многу повеќе. NumPy е значаен Пајтон пакет за научно пресметување.
Сепак, во овој пост, ќе разгледаме различни методи за множење на матрици во Python без користење на NumPy.
Ќе искористиме вгнездени петелки, вградената функција map() и разбирање на списокот.
Дополнително, ќе ги разгледаме придобивките и недостатоците на секоја стратегија, како и кога да се примени секоја од нив. Ако сте нови во линеарната алгебра и сакате да дознаете повеќе за множење на матрици; продолжи да читаш.
Каде користиме множење на матрицата?
Матричното множење се користи во компјутерска графика за менување на 2D и 3D визуелни слики. На пример, можете да ротирате, размерите и преведувате објекти на екранот. Матриците се користат во обработката на слики за да се претстават сликите како низи од пиксели. Освен тоа, матриците може да се користат за спроведување операции како филтрирање на слики.
Ние исто така користиме матрици во машинско учење. Тие можат да ни помогнат да ги претставиме податоците и параметрите на моделот. Можеме да спроведеме бројни операции, како што се пресметување производи со точки и производи со матрица-вектор.
Секако, оваа операција е исто така многу поволна во научните операции. Можеме да го користиме во физиката и инженерството за да ги опишеме физичките величини. Оттука, можеме да работиме со вектори и тензори.
Зошто не можеме да избереме да користиме NumPy?
Додека NumPy е a Пајтон библиотека, не е секогаш идеална опција за множење на матрицата. Можеби нема да избереме да користиме NumPy од причини како што се големината и зависноста, учењето и наследените системи.
Користењето на вградените функции на Пајтон или развивањето прилагоден код може да биде поефикасно во некои случаи. Меѓутоа, клучно е да се забележи дека NumPy е силна библиотека. Покрај тоа, можете да го користите и за множење на матрици.
Сега, ајде да погледнеме како можеме да постигнеме множење на матрицата без NumPy.
Метод на вгнездени јамки
Техниката на вгнездени јамки користи вгнездени јамки за да се изврши множење на матрицата во Python. Функцијата се повторува над секој елемент на матрицата. И, ги множи користејќи серија вгнездени јамки. Функцијата го враќа резултатот, кој е зачуван во нова матрица.
Овој пристап е јасен за разбирање. Сепак, можеби нема да биде толку ефикасен како другите начини, особено за поголеми матрици. Сепак, тоа е прекрасен избор за вас ако сте нови во линеарната алгебра.
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])
# Поставете ја матрицата за резултати на нули.
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
Ајде да дадеме пример како да го направите ова. Можете само да ги додадете овие линии на код подолу за да го тестирате овој пример.
# 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]]
Придобивки:
- Лесно за разбирање.
- Одлично за почетници или за оние кои бараат подлабоко разбирање на множењето на матрицата.
Недостатоци:
- Не толку ефикасни како алтернативните техники, особено за поголеми матрици.
- Не е толку читлив како алтернативните пристапи.
метод на функција map().
Методот на функцијата map() обезбедува алтернативен пристап за правење множење на матрици во Python. Во овој пристап, ја користиме вградената функција map(). Оттука, ние користиме функционална алатка за програмирање што применува дадена функција на секој повторлив елемент (список, торка, итн.). Исто така, функцијата map() прифаќа два параметра, функција и повторлив. И, враќа итератор кој ја применува функцијата на секој повторлив елемент.
Во овој пристап, поминуваме низ секој член на матрицата и го правиме множењето користејќи ја функцијата вгнездена мапа().
Функцијата zip() се користи за повторување низ секој елемент од матриците паралелно.
Конечно, функцијата sum() се користи за собирање на резултатите.
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
Сега, повторно, можеме да го тестираме нашиот код со пример.
# 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]]
Предности
- Поефективен од пристапот на наредени јамки
- Користи функционално програмирање за да го направи кодот поедноставен.
Недостатоци
- Некои луѓе кои не се запознаени со функционалното програмирање може да го сметаат за помалку читлив.
- Тоа е помалку разбирливо од техниката на вгнездени јамки.
Метод за разбирање на списокот
Разбирањето на списокот ви овозможува да генерирате нова листа во една линија код. Оттука, ова е со примена на израз на секој член на постоечката листа.
Во овој пристап, множењето се врши со постојано повторување низ секој член на матрицата. Користиме разбирање на слоевити листи.
# 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]]
Предности
- Во споредба со методот на функцијата map(), пократок и почитлив.
Недостатоци
- Може да биде помалку ефикасен од користењето на функцијата map(), особено за големи матрици.
- Потешко е од пристапот со вгнездени јамки.
Заклучок
Во овој пост, разгледавме алтернативи за користење на NumPy при множење матрици во Python. Извршивме множење на матрицата во вгнездени јамки, вградената функција map() и разбирање на списокот.
Најдобрата стратегија ќе се потпира на посебните потреби на вашиот проект.
Секоја од стратегиите има свои добрите и лошите страни. За да бидете сигурни дека функцијата работи правилно, добра идеја е да додадете неколку тест случаи со различни димензии и вредности на матрицата.
Треба да вклучите и некои тестови за перформанси за да споредите колку добро се извршуваат овие методи.
Оставете Одговор