Матрицаны көбөйтүү сызыктуу алгебранын негизги операциясы болуп саналат.
Биз көбүнчө аны сүрөт иштетүү, машина үйрөнүү жана башка көптөгөн колдонмолордо колдонобуз. NumPy илимий эсептөө үчүн көрүнүктүү Python пакети болуп саналат.
Бирок, бул постто биз NumPy колдонбостон Pythonдо матрицаны көбөйтүүнүн ар кандай ыкмаларын карап чыгабыз.
Биз колдонобуз уяланган илмек, камтылган map() функциясы жана тизмени түшүнүү.
Мындан тышкары, биз ар бир стратегиянын артыкчылыктарын жана кемчиликтерин, ошондой эле алардын ар бирин качан колдонуу керектигин карап чыгабыз. Эгер сиз сызыктуу алгебраны үйрөнүп жатсаңыз жана матрицаны көбөйтүү жөнүндө көбүрөөк билгиңиз келсе; окууну улант.
Матрицаны көбөйтүүнү кайда колдонобуз?
Матрицаны көбөйтүү колдонулат компьютердик графика 2D жана 3D визуалдарды өзгөртүү. Мисалы, сиз экрандагы объекттерди айланта, масштабдап жана которо аласыз. Матрицалар сүрөттөрдү пикселдердин массивдери катары көрсөтүү үчүн сүрөттөрдү иштетүүдө колдонулат. Мындан тышкары, матрицалар сүрөттөрдү чыпкалоо сыяктуу операцияларды жүргүзүү үчүн колдонулушу мүмкүн.
Биз ошондой эле матрицаларды колдонобуз машина үйрөнүү. Алар бизге маалыматтарды жана моделдин параметрлерин көрсөтүүгө жардам берет. Биз көптөгөн операцияларды жасай алабыз, мисалы, эсептөөчү чекит продуктулары жана матрица-вектордук продуктулар.
Албетте, бул операция илимий операцияларда да абдан пайдалуу. Аны физикада жана инженерияда физикалык чоңдуктарды сүрөттөө үчүн колдоно алабыз. Демек, биз векторлор жана тензорлор менен иштей алабыз.
Эмне үчүн биз NumPy колдонууну тандай албайбыз?
Ал эми NumPy а Python китепканасы, бул дайыма эле матрицаны көбөйтүү үчүн идеалдуу вариант боло бербейт. Өлчөм жана көз карандылык, үйрөнүү жана эски тутумдар сыяктуу себептерден улам NumPy колдонууну тандабашыбыз мүмкүн.
Python'дун орнотулган функцияларын колдонуу же ыңгайлаштырылган кодду иштеп чыгуу кээ бир учурларда натыйжалуураак болушу мүмкүн. Бирок, 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() функциясы эки параметрди, функцияны жана кайталануучуну кабыл алат. Жана, ал ар бир кайталануучу элементке функцияны колдонгон итераторду кайтарат.
Бул ыкмада биз матрицанын ар бир мүчөсүнөн өтүп, уяланган 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() функциясын колдонуудан азыраак эффективдүү болушу мүмкүн, өзгөчө чоң матрицалар үчүн.
- Бул уяланган илмектерге караганда кыйыныраак.
жыйынтыктоо
Бул постто биз Pythonдо матрицаларды көбөйтүүдө NumPy колдонууга альтернативаларды карадык. Биз уяланган циклдерде матрицаны көбөйтүүнү, орнотулган map() функциясын жана тизмени түшүнүүнү аткардык.
Эң жакшы стратегия сиздин долбоордун өзгөчө муктаждыктарына таянат.
Ар бир стратегиянын өзүнүн жакшы жана жаман жактары бар. Функция туура иштеп жатканын текшерүү үчүн, ар кандай матрицанын өлчөмдөрү жана баалуулуктары бар кээ бир сыноо учурларын кошуу жакшы идея.
Ошондой эле бул ыкмалардын канчалык деңгээлде аткарыларын салыштыруу үчүн айрым аткаруу тесттерин камтышы керек.
Таштап Жооп