Матрицаны көбейту сызықтық алгебраның негізгі операциясы болып табылады.
Біз оны әдетте кескіндерді өңдеу, машиналық оқыту және т.б. сияқты көптеген қолданбаларда қолданамыз. 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() функциясын және тізімді түсінуді орындадық.
Ең жақсы стратегия сіздің жобаңыздың нақты қажеттіліктеріне сүйенеді.
Стратегиялардың әрқайсысының өзіндік артықшылықтары мен кемшіліктері бар. Функцияның дұрыс жұмыс істеп тұрғанына көз жеткізу үшін әртүрлі матрица өлшемдері мен мәндері бар кейбір сынақ жағдайларын қосқан дұрыс.
Бұл әдістердің қаншалықты жақсы орындалатынын салыстыру үшін кейбір өнімділік сынақтарын қосу керек.
пікір қалдыру