Մատրիցային բազմապատկումը հիմնարար գործողություն է գծային հանրահաշվում:
Մենք այն սովորաբար օգտագործում ենք բազմաթիվ ծրագրերում, ինչպիսիք են պատկերների մշակումը, մեքենայական ուսուցումը և շատ ավելին: NumPy-ը գիտական հաշվարկների համար նշանավոր Python փաթեթ է:
Այնուամենայնիվ, այս գրառման մեջ մենք կդիտարկենք Python-ում մատրիցային բազմապատկում կատարելու տարբեր մեթոդներ՝ առանց NumPy-ի օգտագործման:
Մենք կօգտագործենք տեղադրված օղակները, ներկառուցված map() ֆունկցիան և ցուցակի ըմբռնումը։
Բացի այդ, մենք կդիտարկենք յուրաքանչյուր ռազմավարության առավելություններն ու թերությունները, ինչպես նաև երբ կիրառել դրանցից յուրաքանչյուրը: Եթե դուք նոր եք գծային հանրահաշվում և ցանկանում եք ավելին իմանալ մատրիցային բազմապատկման մասին. շարունակիր կարդալ.
Որտե՞ղ ենք մենք օգտագործում մատրիցային բազմապատկումը:
Մատրիցային բազմապատկումն օգտագործվում է համակարգչային գրաֆիկա 2D և 3D պատկերները փոխելու համար: Օրինակ, դուք կարող եք պտտել, չափել և թարգմանել օբյեկտները էկրանին: Մատրիցներն օգտագործվում են պատկերների մշակման մեջ՝ նկարները որպես պիքսելների զանգվածներ ներկայացնելու համար: Բացի այդ, մատրիցները կարող են օգտագործվել պատկերի զտման նման գործողություններ իրականացնելու համար:
Մենք նաև օգտագործում ենք մատրիցներ Machine Learning. Նրանք կարող են օգնել մեզ ներկայացնել տվյալների և մոդելի պարամետրերը: Մենք կարող ենք իրականացնել բազմաթիվ գործողություններ, ինչպիսիք են կետային արտադրանքների հաշվարկը և մատրիցային վեկտորային արտադրանքները:
Իհարկե, այս վիրահատությունը մեծ ձեռնտու է նաև գիտական գործողություններում։ Մենք կարող ենք այն օգտագործել ֆիզիկայում և ճարտարագիտության մեջ՝ ֆիզիկական մեծությունները նկարագրելու համար: Այսպիսով, մենք կարող ենք գործել վեկտորներով և թենզորներով:
Ինչու՞ մենք չենք կարող ընտրել օգտագործել NumPy-ը:
Մինչ NumPy-ն ա Python գրադարան, դա միշտ չէ, որ իդեալական տարբերակ է մատրիցային բազմապատկման համար։ Մենք կարող ենք չօգտագործել NumPy-ը այնպիսի պատճառներով, ինչպիսիք են չափը և կախվածությունը, սովորելը և հին համակարգերը:
Python-ի ներկառուցված գործառույթների օգտագործումը կամ մաքսային կոդի մշակումը կարող է որոշ դեպքերում ավելի արդյունավետ լինել: Այնուամենայնիվ, կարևոր է նշել, որ NumPy-ն ուժեղ գրադարան է: Բացի այդ, այն կարող եք օգտագործել նաև մատրիցային բազմապատկման համար։
Հիմա եկեք տեսնենք, թե ինչպես կարող ենք հասնել մատրիցային բազմապատկման առանց NumPy-ի:
Nested loops մեթոդ
Nested loops տեխնիկան օգտագործում է nested loops 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() ֆունկցիան ընդունում է երկու պարամետր՝ ֆունկցիա և կրկնվող: Եվ, այն վերադարձնում է կրկնող, որը կիրառում է ֆունկցիան յուրաքանչյուր կրկնվող տարրի վրա:
Այս մոտեցմամբ մենք անցնում ենք մատրիցայի յուրաքանչյուր անդամ և կատարում ենք բազմապատկումը՝ օգտագործելով nested 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]]
Առավելությունները
- Ավելի արդյունավետ, քան stacked loops մոտեցումը
- Այն օգտագործում է ֆունկցիոնալ ծրագրավորում՝ կոդը ավելի պարզ դարձնելու համար:
Թերությունները
- Որոշ մարդիկ, ովքեր ծանոթ չեն ֆունկցիոնալ ծրագրավորմանը, կարող են այն ավելի քիչ ընթեռնելի համարել:
- Դա ավելի քիչ հասկանալի է, քան nested loops տեխնիկան:
Ցուցակի ըմբռնման մեթոդ
Ցուցակի ըմբռնումը թույլ է տալիս ստեղծել նոր ցուցակ կոդի մեկ տողում: Հետևաբար, սա գոյություն ունեցող ցուցակի յուրաքանչյուր անդամի նկատմամբ արտահայտություն կիրառելով է:
Այս մոտեցման դեպքում բազմապատկումն իրականացվում է մատրիցայի յուրաքանչյուր անդամի միջոցով բազմիցս կրկնելով: Մենք օգտագործում ենք շերտավոր ցուցակի ընկալում:
# 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() ֆունկցիան օգտագործելը, հատկապես մեծ մատրիցների համար:
- Դա ավելի դժվար է, քան nested loops մոտեցումը:
Եզրափակում
Այս գրառման մեջ մենք դիտարկեցինք NumPy-ի օգտագործման այլընտրանքները Python-ում մատրիցները բազմապատկելիս: Մենք իրականացրել ենք մատրիցային բազմապատկում ներկառուցված օղակներում, ներկառուցված map() ֆունկցիան և ցուցակի ընկալումը:
Լավագույն ռազմավարությունը հիմնված կլինի ձեր նախագծի կոնկրետ կարիքների վրա:
Ռազմավարություններից յուրաքանչյուրն ունի իր դրական և բացասական կողմերը: Համոզվելու համար, որ ֆունկցիան ճիշտ է աշխատում, լավ գաղափար է ավելացնել փորձարկման դեպքեր՝ տարբեր մատրիցային չափերով և արժեքներով:
Դուք նաև պետք է ներառեք որոշ կատարողական թեստեր՝ համեմատելու, թե որքան լավ են գործում այս մեթոդները:
Թողնել գրառում