Matritsalarni ko'paytirish chiziqli algebrada asosiy amaldir.
Biz uni odatda tasvirni qayta ishlash, mashinani o'rganish va boshqa ko'plab dasturlarda ishlatamiz. NumPy ilmiy hisoblash uchun Python-ning mashhur paketidir.
Biroq, ushbu postda biz NumPy-dan foydalanmasdan Python-da matritsalarni ko'paytirishning turli usullarini ko'rib chiqamiz.
foydalanamiz ichki ko'chadan, o'rnatilgan map() funksiyasi va ro'yxatni tushunish.
Bundan tashqari, biz har bir strategiyaning afzalliklari va kamchiliklarini, shuningdek, ularning har birini qachon qo'llashni ko'rib chiqamiz. Agar siz chiziqli algebra uchun yangi bo'lsangiz va matritsalarni ko'paytirish haqida ko'proq bilmoqchi bo'lsangiz; o'qishda davom eting.
Matritsalarni ko'paytirishni qayerda ishlatamiz?
Matritsalarni ko'paytirishdan foydalaniladi kompyuter grafikasi 2D va 3D vizuallarni o'zgartirish uchun. Masalan, ekrandagi ob'ektlarni aylantirish, masshtablash va tarjima qilish mumkin. Matritsalar tasvirni qayta ishlashda tasvirlarni piksel massivlari sifatida ko'rsatish uchun ishlatiladi. Bundan tashqari, matritsalar tasvirni filtrlash kabi operatsiyalarni bajarish uchun ishlatilishi mumkin.
Biz matritsalardan ham foydalanamiz kompyuterni o'rganish. Ular bizga ma'lumotlar va model parametrlarini ifodalashda yordam berishi mumkin. Biz nuqta mahsulotlarini hisoblash va matritsa-vektor mahsulotlarini hisoblash kabi ko'plab operatsiyalarni bajarishimiz mumkin.
Albatta, bu operatsiya ilmiy operatsiyalarda ham juda foydali. Biz uni fizika va muhandislikda fizik miqdorlarni tasvirlash uchun ishlatishimiz mumkin. Shunday qilib, biz vektorlar va tensorlar bilan ishlashimiz mumkin.
Nega biz NumPy dan foydalanishni tanlay olmaymiz?
NumPy esa a Python kutubxonasi, har doim ham matritsani ko'paytirish uchun ideal variant emas. Biz NumPy-dan o'lcham va bog'liqlik, o'rganish va eski tizimlar kabi sabablarga ko'ra foydalanishni tanlamasligimiz mumkin.
Python-ning o'rnatilgan funktsiyalaridan foydalanish yoki maxsus kodni ishlab chiqish ba'zi hollarda samaraliroq bo'lishi mumkin. Shuni ta'kidlash kerakki, NumPy kuchli kutubxona. Bundan tashqari, siz uni matritsalarni ko'paytirish uchun ham ishlatishingiz mumkin.
Keling, NumPysiz matritsalarni ko'paytirishga qanday erishish mumkinligini ko'rib chiqaylik.
Ichki halqalar usuli
Python-da matritsalarni ko'paytirishni amalga oshirish uchun ichki o'rnatilgan tsikllar texnikasi ichki tsikllardan foydalanadi. Funktsiya har bir matritsa elementi ustida takrorlanadi. Va, u bir qator ichki o'rnatilgan halqalar yordamida ularni ko'paytiradi. Funktsiya yangi matritsada saqlanadigan natijani qaytaradi.
Ushbu yondashuvni tushunish oson. Biroq, u boshqa usullar kabi samarali bo'lmasligi mumkin, ayniqsa kattaroq matritsalar uchun. Biroq, agar siz chiziqli algebra uchun yangi bo'lsangiz, bu siz uchun ajoyib tanlovdir.
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])
# Natija matritsasini nolga o'rnating.
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
Keling, buni qanday qilish haqida bir misol keltiraylik. Ushbu misolni sinab ko'rish uchun quyidagi kod qatorlarini qo'shishingiz mumkin.
# 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]]
foydasi:
- Tushunish oson.
- Yangi boshlanuvchilar yoki matritsalarni ko'paytirishni chuqurroq tushunishni istaganlar uchun juda yaxshi.
Kamchiliklari:
- Muqobil usullar kabi samarali emas, ayniqsa kattaroq matritsalar uchun.
- Bu muqobil yondashuvlar kabi o'qilishi mumkin emas.
map() funktsiyasi usuli
map() funktsiya usuli Pythonda matritsalarni ko'paytirish uchun muqobil yondashuvni taqdim etadi. Ushbu yondashuvda biz o'rnatilgan map() funksiyasidan foydalanamiz. Shunday qilib, biz har bir takrorlanadigan elementga (ro'yxat, kortej va boshqalar) taqdim etilgan funktsiyani qo'llaydigan funktsional dasturlash vositasidan foydalanamiz. Shuningdek, map() funksiyasi ikkita parametrni, funksiya va iterativni qabul qiladi. Va, bu funksiyani har bir takrorlanadigan elementga qo'llaydigan iteratorni qaytaradi.
Ushbu yondashuvda biz matritsaning har bir a'zosi orqali o'tamiz va ko'paytirishni ichki xarita () funktsiyasidan foydalanib bajaramiz.
Zip() funksiyasi matritsalarning har bir elementini parallel ravishda takrorlash uchun ishlatiladi.
Nihoyat, natijalarni qo'shish uchun sum() funktsiyasidan foydalaniladi.
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
Endi yana bir misol bilan kodimizni sinab ko'rishimiz mumkin.
# 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]]
afzalliklari
- Stacked loops yondashuvidan ko'ra samaraliroq
- Kodni soddalashtirish uchun u funktsional dasturlashdan foydalanadi.
Kamchiliklari
- Funktsional dasturlash bilan tanish bo'lmagan ba'zi odamlar uni kamroq o'qishlari mumkin.
- Bu ichki halqalar texnikasiga qaraganda kamroq tushunarli.
Ro'yxatni tushunish usuli
Ro'yxatni tushunish sizga bitta kod qatorida yangi ro'yxat yaratish imkonini beradi. Demak, bu mavjud ro'yxatning har bir a'zosiga ifoda qo'llash orqali amalga oshiriladi.
Ushbu yondashuvda ko'paytirish har bir matritsa a'zosi orqali qayta-qayta takrorlash orqali amalga oshiriladi. Biz qatlamli ro'yxatni tushunishdan foydalanamiz.
# 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]]
foydasi
- map() funktsiyasi usuli bilan solishtirganda, qisqaroq va o'qilishi mumkin.
Kamchiliklari
- Bu map() funksiyasidan, ayniqsa katta matritsalar uchun foydalanishdan kam samaraliroq bo'lishi mumkin.
- Bu ichki halqalarga yaqinlashishdan ko'ra qiyinroq.
Xulosa
Ushbu postda biz Python-da matritsalarni ko'paytirishda NumPy-dan foydalanishning muqobil variantlarini ko'rib chiqdik. Biz matritsalarni ko'paytirishni ichki tsikllarda, o'rnatilgan map() funksiyasi va ro'yxatni tushunishni amalga oshirdik.
Eng yaxshi strategiya loyihangizning alohida ehtiyojlariga tayanadi.
Har bir strategiyaning o'ziga xos ijobiy va salbiy tomonlari bor. Funktsiyaning to'g'ri ishlashiga ishonch hosil qilish uchun turli matritsa o'lchamlari va qiymatlari bilan bir nechta sinov holatlarini qo'shish yaxshi bo'ladi.
Ushbu usullar qanchalik yaxshi bajarilishini solishtirish uchun ba'zi ishlash testlarini ham kiritishingiz kerak.
Leave a Reply