Matris çarpımı lineer cebirde temel bir işlemdir.
Genellikle görüntü işleme, makine öğrenimi ve daha pek çok uygulamada kullanırız. NumPy, bilimsel bilgi işlem için dikkate değer bir Python paketidir.
Ancak bu yazıda, NumPy'yi kullanmadan Python'da matris çarpımı yapmak için çeşitli yöntemlere bakacağız.
kullanacağız İç içe geçmiş döngüler, yerleşik map() işlevi ve liste kavrama.
Ek olarak, her bir stratejinin avantajlarına ve dezavantajlarına ve bunların ne zaman uygulanacağına bakacağız. Doğrusal cebirde yeniyseniz ve matris çarpımı hakkında daha fazla bilgi edinmek istiyorsanız; okumaya devam et
Matris Çarpımını Nerede Kullanıyoruz?
Matris çarpımı kullanılır bilgisayar grafikleri 2D ve 3D görselleri değiştirmek için. Örneğin, ekrandaki nesneleri döndürebilir, ölçekleyebilir ve çevirebilirsiniz. Matrisler, resimleri piksel dizileri olarak temsil etmek için görüntü işlemede kullanılır. Ayrıca, görüntü filtreleme gibi işlemleri yapmak için matrisler kullanılabilir.
Ayrıca matrislerden de faydalanıyoruz. makine öğrenme. Verileri ve model parametrelerini temsil etmemize yardımcı olabilirler. Hesaplama nokta çarpımları ve matris vektör ürünleri gibi çok sayıda işlemi yürütebiliriz.
Elbette bu operasyon bilimsel operasyonlarda da oldukça avantajlıdır. Fiziksel nicelikleri tanımlamak için fizik ve mühendislikte kullanabiliriz. Dolayısıyla, vektörler ve tensörlerle çalışabiliriz.
Neden NumPy Kullanmayı Seçmeyebiliriz?
NumPy bir Python kitaplığı, matris çarpımı için her zaman ideal bir seçenek değildir. Boyut ve bağımlılık, öğrenme ve eski sistemler gibi nedenlerle NumPy kullanmayı tercih etmeyebiliriz.
Python'un yerleşik işlevlerini kullanmak veya özel kod geliştirmek bazı durumlarda daha verimli olabilir. Bununla birlikte, NumPy'nin güçlü bir kitaplık olduğunu not etmek çok önemlidir. Ayrıca matris çarpımı için de kullanabilirsiniz.
Şimdi, NumPy olmadan matris çarpımını nasıl başarabileceğimize bir göz atalım.
İç içe döngüler yöntemi
İç içe döngüler tekniği, Python'da matris çarpımını yürütmek için iç içe döngüler kullanır. İşlev, her bir matris öğesi üzerinde yinelenir. Ve bunları bir dizi iç içe döngü kullanarak çoğaltır. İşlev, yeni bir matriste saklanan sonucu döndürür.
Bu yaklaşımın anlaşılması kolaydır. Ancak, özellikle daha büyük matrisler için diğer yöntemler kadar verimli olmayabilir. Yine de lineer cebirde yeniyseniz bu sizin için harika bir seçim.
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])
# Sonuç matrisini sıfıra ayarlayın.
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
Bunun nasıl yapılacağına dair bir örnek verelim. Bu örneği test etmek için aşağıdaki kod satırlarını ekleyebilirsiniz.
# 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]]
Faydaları:
- Anlaşılması kolay.
- Yeni başlayanlar veya matris çarpımını daha derinden anlamak isteyenler için harika.
Dezavantajları:
- Özellikle daha büyük matrisler için alternatif teknikler kadar etkili değildir.
- Alternatif yaklaşımlar kadar okunabilir değildir.
harita() işlev yöntemi
map() işlev yöntemi, Python'da matris çarpımı yapmak için alternatif bir yaklaşım sağlar. Bu yaklaşımda yerleşik map() işlevini kullanıyoruz. Bu nedenle, sağlanan bir işlevi yinelenebilir her öğeye (liste, tuple, vb.) uygulayan işlevsel bir programlama aracı kullanıyoruz. Ayrıca, map() işlevi, bir işlev ve yinelenebilir olmak üzere iki parametre kabul eder. Ve işlevi yinelenebilir her öğeye uygulayan bir yineleyici döndürür.
Bu yaklaşımda, matrisin her bir üyesini inceliyoruz ve çarpma işlemini yuvalanmış map() işlevini kullanarak yapıyoruz.
Zip() işlevi, matrislerin her bir öğesini paralel olarak yinelemek için kullanılır.
Son olarak, sonuçları toplamak için sum() işlevi kullanılır.
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
Şimdi yine bir örnekle kodumuzu test edebiliriz.
# 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]]
Avantajlar
- Yığılmış döngüler yaklaşımından daha etkili
- Kodu daha basit hale getirmek için fonksiyonel programlamayı kullanır.
Dezavantajlar
- İşlevsel programlamaya aşina olmayan bazı kişiler, onu daha az okunabilir bulabilir.
- İç içe döngüler tekniğinden daha az anlaşılır.
Liste anlama yöntemi
Liste kavrama, tek bir kod satırında yeni bir liste oluşturmanıza olanak tanır. Dolayısıyla bu, var olan bir listenin her üyesine bir ifade uygulamaktır.
Bu yaklaşımda, çarpma, her bir matris elemanını tekrar tekrar yineleyerek gerçekleştirilir. Katmanlı liste kavrayışı kullanıyoruz.
# 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]]
Faydaları
- map() işlev yöntemiyle karşılaştırıldığında, daha kısa ve daha okunabilir.
Dezavantajlar
- Özellikle büyük matrisler için map() işlevini kullanmaktan daha az etkili olabilir.
- İç içe döngüler yaklaşımından daha zordur.
Sonuç
Bu yazıda, Python'da matrisleri çarparken NumPy kullanmanın alternatiflerini inceledik. Yuvalanmış döngülerde, yerleşik map() işlevinde ve liste kavramada matris çarpımı gerçekleştirdik.
En iyi strateji, projenizin özel ihtiyaçlarına bağlı olacaktır.
Stratejilerin her birinin kendine göre artıları ve eksileri vardır. Fonksiyonun düzgün çalıştığından emin olmak için, çeşitli matris boyutları ve değerleri ile bazı test durumları eklemek iyi bir fikirdir.
Bu yöntemlerin ne kadar iyi yürütüldüğünü karşılaştırmak için bazı performans testleri de eklemelisiniz.
Yorum bırak