Python: NumPy ile Vektörler, Matrisler ve Diziler

Python Vectors Matrices



Bu derste, Python'da NumPy kitaplığını kullanarak vektörler, matrisler ve dizilerle oynamak için bazı güzel ipuçlarına ve püf noktalarına bakacağız. Bu ders, Veri Bilimine başlıyorsanız ve bu bileşenlere giriş niteliğindeki matematiksel genel bakışa ve kodda NumPy kullanarak bunlarla nasıl oynayabileceğimize ihtiyacınız varsa çok iyi bir başlangıç ​​noktasıdır.

NumPy kütüphanesi, vektörler, matrisler ve diziler gibi Makine Öğrenimi ve Veri Biliminde sıklıkla kullanılan veri yapıları üzerinde yapılması gereken çeşitli işlemleri gerçekleştirmemizi sağlar. Yalnızca birçok Machine Learning işlem hattında kullanılan NumPy ile en yaygın işlemleri göstereceğiz. Son olarak, NumPy'nin işlemleri gerçekleştirmenin bir yolu olduğunu lütfen unutmayın, bu nedenle gösterdiğimiz matematiksel işlemler bu dersin ana odak noktasıdır ve NumPy paketinin kendisi değildir. Başlayalım.







Vektör nedir?

Google'a göre bir Vektör, özellikle uzayda bir noktanın diğerine göre konumunu belirleyen, yönü ve büyüklüğü olan bir miktardır.





Vektörler, sadece büyüklüğü değil aynı zamanda özelliklerin yönünü de tanımladıkları için Makine Öğreniminde çok önemlidir. NumPy'de aşağıdaki kod parçacığıyla bir vektör oluşturabiliriz:





numpy'yi içe aktarolarakÖrneğin

satır_vektör = np.dizi([1,2,3])
Yazdır(satır_vektör)

Yukarıdaki kod parçasında bir satır vektörü oluşturduk. Ayrıca aşağıdaki gibi bir sütun vektörü de oluşturabiliriz:

numpy'yi içe aktarolarakÖrneğin

col_vektör = np.dizi([[1],[2],[3]])
Yazdır(col_vektör)

Matris Yapmak

Bir matris basitçe iki boyutlu bir dizi olarak anlaşılabilir. Çok boyutlu bir dizi yaparak NumPy ile bir matris yapabiliriz:



matris = np.dizi([[1,2,3],[4,5,6],[7,8,9]])
Yazdır(matris)

Matris çok boyutlu diziye tam olarak benzese de, matris veri yapısı tavsiye edilmez iki nedenden dolayı:

  1. NumPy paketi söz konusu olduğunda dizi standarttır
  2. NumPy ile yapılan işlemlerin çoğu matris değil diziler döndürür

Seyrek Matris Kullanma

Hatırlatmak gerekirse, seyrek matris, öğelerin çoğunun sıfır olduğu matristir. Şimdi, veri işleme ve makine öğreniminde ortak bir senaryo, öğelerin çoğunun sıfır olduğu işleme matrisleridir. Örneğin, satırları Youtube'daki her videoyu tanımlayan ve sütunları her kayıtlı kullanıcıyı temsil eden bir matris düşünün. Her değer, kullanıcının bir videoyu izleyip izlemediğini gösterir. Elbette bu matristeki değerlerin çoğu sıfır olacaktır. NS seyrek matris ile avantaj sıfır olan değerleri saklamamasıdır. Bu, büyük bir hesaplama avantajı ve depolama optimizasyonu ile sonuçlanır.

Burada bir kıvılcım matrisi oluşturalım:

scipy ithalat seyrek

orijinal_matris = np.dizi([[1,0,3],[0,0,6],[7,0,0]])
sparse_matrix = sparse.csr_matrix(orijinal_matris)
Yazdır(seyrek_matris)

Kodun nasıl çalıştığını anlamak için buradaki çıktıya bakacağız:

Yukarıdaki kodda, bir NumPy'nin işlevini kullanarak bir Sıkıştırılmış seyrek satır sıfır tabanlı dizinler kullanılarak sıfır olmayan öğelerin temsil edildiği matris. Çeşitli seyrek matris türleri vardır, örneğin:

  • Sıkıştırılmış seyrek sütun
  • Liste listesi
  • anahtar sözlüğü

Burada diğer seyrek matrislere dalmayacağız, ancak her birinin kullanımının özel olduğunu ve hiç kimsenin 'en iyi' olarak adlandırılamayacağını biliyoruz.

İşlemleri tüm Vektör öğelerine uygulama

Birden çok vektör öğesine ortak bir işlem uygulamamız gerektiğinde bu yaygın bir senaryodur. Bu, bir lambda tanımlayarak ve ardından aynısını vektörleştirerek yapılabilir. Aynısı için bazı kod pasajlarını görelim:

matris = np.dizi([
[1,2,3],
[4,5,6],
[7,8,9]])

mul_5 = lambda x: x* 5
vectorized_mul_5 = np.vectorize(mul_5)

vectorized_mul_5(matris)

Kodun nasıl çalıştığını anlamak için buradaki çıktıya bakacağız:

Yukarıdaki kod parçacığında, basit bir lambda tanımını vektörün her bir öğesini işleyebilen bir işleve dönüştürmek için NumPy kitaplığının bir parçası olan vectorize işlevini kullandık. Vectorize olduğunu not etmek önemlidir elemanların üzerinde sadece bir döngü ve programın performansı üzerinde hiçbir etkisi yoktur. NumPy ayrıca izin verir yayın , yani yukarıdaki karmaşık kod yerine basitçe şunları yapabilirdik:

matris* 5

Ve sonuç tamamen aynı olurdu. Önce karmaşık kısmı göstermek istedim, yoksa bölümü atlardın!

Ortalama, Varyans ve Standart Sapma

NumPy ile vektörler üzerinde tanımlayıcı istatistiklerle ilgili işlemleri yapmak kolaydır. Bir vektörün ortalaması şu şekilde hesaplanabilir:

np.mean(matris)

Bir vektörün varyansı şu şekilde hesaplanabilir:

np.var(matris)

Bir vektörün standart sapması şu şekilde hesaplanabilir:

ör. standart(matris)

Verilen matris üzerindeki yukarıdaki komutların çıktısı burada verilmiştir:

Bir Matrisin Transpoze Edilmesi

Yer değiştirme, etrafınız matrislerle çevriliyken duyacağınız çok yaygın bir işlemdir. Yer değiştirme, bir matrisin sütun ve satır değerlerini değiştirmenin bir yoludur. Lütfen unutmayın ki bir vektör aktarılamaz bir vektör olarak, bu değerler satırlara ve sütunlara kategorize edilmeyen bir değerler topluluğudur. Lütfen bir satır vektörünü bir sütun vektörüne dönüştürmenin yer değiştirme olmadığını unutmayın (bu dersin kapsamı dışında kalan lineer cebir tanımlarına dayanarak).

Şimdilik, sadece bir matrisi transpoze ederek huzuru bulacağız. NumPy ile bir matrisin transpozesine erişmek çok basittir:

matris.T

Yukarıdaki komutun verilen matris üzerindeki çıktısı burada verilmiştir:

Aynı işlem bir satır vektörünü bir sütun vektörüne dönüştürmek için yapılabilir.

Bir Matrisi Düzleştirme

Öğelerini doğrusal bir şekilde işlemek istiyorsak, bir matrisi tek boyutlu bir diziye dönüştürebiliriz. Bu, aşağıdaki kod parçacığı ile yapılabilir:

matrix.flatten()

Yukarıdaki komutun verilen matris üzerindeki çıktısı burada verilmiştir:

Yassılaştırılmış matrisin tek boyutlu bir dizi olduğuna dikkat edin, sadece doğrusaldır.

Özdeğerlerin ve Özvektörlerin Hesaplanması

Özvektörler, Machine Learning paketlerinde çok yaygın olarak kullanılır. Bu nedenle, doğrusal bir dönüşüm fonksiyonu bir matris olarak sunulduğunda, X, Özvektörler vektörün yalnızca ölçeğinde değişen ancak yönünü değiştirmeyen vektörlerdir. Şunu söyleyebiliriz:

Xv = yv

Burada X kare matristir ve γ Özdeğerleri içerir. Ayrıca v, özvektörleri içerir. NumPy ile Özdeğerleri ve Özvektörleri hesaplamak kolaydır. İşte aynısını gösterdiğimiz kod parçası:

değerler, çarpanlar = np.linalg.eig(matris)

Yukarıdaki komutun verilen matris üzerindeki çıktısı burada verilmiştir:

Vektörlerin Nokta Çarpımları

Vektörlerin Nokta Çarpımları, 2 vektörü çarpmanın bir yoludur. Seni anlatıyor vektörlerin ne kadarı aynı yöndedir? , size tam tersini söyleyen çapraz çarpımın aksine, vektörlerin aynı yönde ne kadar az olduğunu (ortogonal olarak adlandırılır). Burada kod parçacığında verilen iki vektörün nokta çarpımını hesaplayabiliriz:

a = np.dizi([3,5,6])
b = np.dizi([2. 3,on beş,1])

np.nokta(bir, b)

Verilen dizilerde yukarıdaki komutun çıktısı burada verilmiştir:

Matrisleri Toplama, Çıkarma ve Çarpma

Matrislerde birden çok matrisin toplanması ve çıkarılması oldukça basit bir işlemdir. Bunu yapmanın iki yolu vardır. Bu işlemleri gerçekleştirmek için kod parçacığına bakalım. Bunu basit tutmak amacıyla aynı matrisi iki kez kullanacağız:

np.add(matris, matris)

Ardından, iki matris şu şekilde çıkarılabilir:

np.çıkarma(matris, matris)

Yukarıdaki komutun verilen matris üzerindeki çıktısı burada verilmiştir:

Beklendiği gibi, matristeki öğelerin her biri karşılık gelen öğeyle toplanır/çıkarılır. Bir matrisi çarpmak, daha önce yaptığımız gibi nokta çarpımını bulmaya benzer:

np.nokta(matris, matris)

Yukarıdaki kod, aşağıdaki gibi verilen iki matrisin gerçek çarpım değerini bulacaktır:

matris*matris

Yukarıdaki komutun verilen matris üzerindeki çıktısı burada verilmiştir:

Çözüm

Bu derste, Veri işleme, tanımlayıcı istatistik ve veri bilimi yaygın olarak kullanılan Vektörler, Matrisler ve Diziler ile ilgili birçok matematiksel işlemden geçtik. Bu, çok çeşitli kavramların yalnızca en yaygın ve en önemli bölümlerini kapsayan hızlı bir dersti, ancak bu işlemler, bu veri yapılarıyla uğraşırken tüm işlemlerin neler yapılabileceği hakkında çok iyi bir fikir vermelidir.

Lütfen ders hakkındaki görüşlerinizi Twitter'da özgürce paylaşın. @linuxhint ve @sbmaggarwal (O benim!).