Kod mnożenia macierzy Pythona
Wykonaj mnożenie macierzy w czystym Pythonie bez zależności. Przeprowadź porównanie zagnieżdżonych pętli ze zoptymalizowanymi strukturami.
Przegląd
Mnożenie macierzy jest podstawową operacją matematyczną w algebrze liniowej, grafice komputerowej i uczeniu maszynowym. Polega na wzięciu dwóch macierzy i utworzeniu trzeciej poprzez obliczenie iloczynów skalarnych wierszy i kolumn.
Aby pomnożyć macierz A przez macierz B, liczba kolumn w A musi być równa liczbie wierszy w B. Otrzymana macierz ma wymiary wierszy A i kolumn B.
W czystym Pythonie mnożenie macierzy jest realizowane przy użyciu trzech zagnieżdżonych pętli. Chociaż ta operacja O(n³) jest łatwa do napisania, jest powolna, dlatego badacze danych używają w środowisku produkcyjnym wyspecjalizowanych silników bibliotecznych, takich jakNumPy.
Dane wyjściowe kodu i wykonania
Mnożenie macierzy w czystym Pythonie przy użyciu zagnieżdżonych pętli i rozumienia list.
def multiply_matrices(A, B):
rows_A = len(A)
cols_A = len(A[0])
rows_B = len(B)
cols_B = len(B[0])
if cols_A != rows_B:
raise ValueError("Cannot multiply: column size of A must match row size of B.")
# Initialize result matrix with zeros
result = [[0 for _ in range(cols_B)] for _ in range(rows_A)]
# Iterate through rows of A
for i in range(rows_A):
# Iterate through columns of B
for j in range(cols_B):
# Iterate through rows of B (or columns of A)
for k in range(cols_A):
result[i][j] += A[i][k] * B[k][j]
return result
# 2x3 Matrix A
matrix_A = [
[1, 2, 3],
[4, 5, 6]
]
# 3x2 Matrix B
matrix_B = [
[7, 8],
[9, 10],
[11, 12]
]
print("Matrix A (2x3):", matrix_A)
print("Matrix B (3x2):", matrix_B)
res = multiply_matrices(matrix_A, matrix_B)
print("Product (2x2):", res)Matrix A (2x3): [[1, 2, 3], [4, 5, 6]]
Matrix B (3x2): [[7, 8], [9, 10], [11, 12]]
Product (2x2): [[58, 64], [139, 154]]Wdrażanie krok po kroku
- Matematyczne renderowanie grafiki i obrót współrzędnych
- Proste produkty punktowe warstwy sztucznej sieci neuronowej
- Zrozumienie struktur algorytmicznych i zagnieżdżonych pętli
Często zadawane pytania
DlaczegoNumPywykonuje mnożenie macierzy o wiele szybciej?
NumPyjest napisany w C i wykorzystuje wysoce zoptymalizowane biblioteki BLAS/LAPACK. Wykorzystuje wektoryzację, optymalizację pamięci podręcznej procesora i wykonywanie równoległe, czego nie mogą zrobić standardowe pętle Pythona.
Co to jest operator `@` w Pythonie?
Począwszy odPython 3.5, symbol `@` został wprowadzony jako dedykowany operator infiksowy do mnożenia macierzy, umożliwiający uruchamianie `A @ B` podczas używania tablic numpy.