Matritsali obyektlar. Hisoblash amaliyotida N o‘lchamli massivlar o‘rniga ko‘pincha vektorlar va matritsalar (bir o‘lchovli va ikki o‘lchovli massivlar) bilan ishlash qulayroqdir. Xususan, dasturlashda massivlar bilan elementli amallar o‘rniga matritsali amallardan foydalanish mumkin. Matritsa turlari bilan ishlash MATLAB ilmiy hisoblash tizimining hisoblash asosi hisoblanadi.
NumPy to'plamida N o'lchovli massivning umumiy turiga (ndarray) qo'shimcha ravishda vektor, matritsa va tenzor ob'ektlarining kichik sinflari mavjud. Bizni NumPy matritsa ob'ektlari (matritsalari) chiziqli algebra masalalarini yechishda foydalanish nuqtai nazaridan qiziqtiradi. Bu yerda ndarray bilan solishtirganda matritsadan foydalanishning o'ziga xos xususiyatlarini qayd etamiz. Ko'rinib turibdiki, bir tomondan, ma'lumotlar umumiy turi sifatida massivlar bilan ishlash ko'proq imkoniyatlarni beradi. Boshqa tomondan, matritsali masalalar ko'pincha ilovalar uchun o'zini-o'zi ta'minlaydi va umumiy massivlar bilan ishlash uchun keng imkoniyatlarga ehtiyoj yo'q.
Matritsa ob'ektlari uchun satrni indekslash mumkin, matritsa elementlari MATLAB sintaksisiga ko'ra satr va ustun uchun ajratuvchi sifatida bo'sh joy bilan belgilanadi.
import numpy as np
a = np.mat('1 2 3; 4 5 6')
b = np.mat([[1, 2, 3], [4, 5, 6]])
print(type(a), 'а:\n', a)
print(type(b), 'b:\n', b)
Natija:
а:
[[1 2 3]
[4 5 6]]
b:
[[1 2 3]
[4 5 6]]
Chiziqli algebraning asosiy amallari matritsalarni ko'paytirishdir (maxsus holatda matritsalarni vektor bo`yicha va vektorni vektor bo'yicha). NumPy da ndarray va matritsa ob'ektlaridan foydalanilganda, matritsalarni ko'paytirish sintaksisi boshqacha. ndarray da * belgisi element bo‘yicha ko‘paytirishga to‘g‘ri keladi, matritsani ko‘paytirish uchun dot() funksiyasi qo‘llaniladi. matrix da * belgisi matritsalarni ko‘paytirish uchun, multiply() funksiyasi esa elementi bo‘yicha ko‘paytirish uchun ishlatiladi.
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print('ndarray - a*b:\n', a*b)
print('ndarray - dot(a,b):\n', np.dot(a, b))
c = np.mat(a)
d = np.mat(b)
print('matrix - c*d:\n', c*d)
print('matrix - multiply(c,d):\n', np.multiply(c, d))
Natija:
ndarray - a*b:
[[ 5 12]
[21 32]]
ndarray - dot(a,b):
[[19 22]
[43 50]]
matrix - c*d:
[[19 22]
[43 50]]
matrix - multiply(c,d):
[[ 5 12]
[21 32]]
Bu misol ndarray obyektlarini matritsaga aylantirish uchun mat() funksiyasidan foydalanadi. U massivlarni aniqlash uchun zeros(), one(), eye(), linspace() kabi funksiyalar yordamida matritsalarni aniqlashda foydalanish mumkin.
Massivlar bilan ishlashda transpozitsiyalangan matritsani olish uchun (satrlarni berilgan matritsa ustunlari bilan almashtirish) .T atributidan foydalanish qulay.
Matritsa ob'ektlari uchun quyidagi atributlar ham qo'llaniladi:
• .H – kompleks bog`langan transpozitsiya;
• .I – teskari matritsa;
• .A – matritsani ikki o‘lchovli massivga aylantirish,
import numpy as np
a = np.mat(np.linspace(1, 4, 4).reshape(2,2))
print('linspace - reshape -> a:\n', a)
print('a: ', type(a))
b = a.I
print('a.T:\n', a.T)
print('a.I:\n', b)
print('a*a.I:\n', a*b)
print('a.A: ', type(a.A))
Natija:
linspace - reshape -> a:
[[1. 2.]
[3. 4.]]
a:
a.T:
[[1. 3.]
[2. 4.]]
a.I:
[[-2. 1. ]
[ 1.5 -0.5]]
a*a.I:
[[1.0000000e+00 0.0000000e+00]
[8.8817842e-16 1.0000000e+00]]
a.A:
Do'stlaringiz bilan baham: |