Python: Vektor, Matriks dan Susunan dengan NumPy

Python Vectors Matrices



Dalam pelajaran ini, kita akan melihat beberapa petua dan trik yang kemas untuk bermain dengan vektor, matriks dan tatasusunan menggunakan perpustakaan NumPy di ​​Python. Pelajaran ini adalah titik permulaan yang sangat baik jika anda memulakan Sains Data dan memerlukan gambaran umum matematik pengenalan mengenai komponen-komponen ini dan bagaimana kita dapat bermain dengannya menggunakan NumPy dalam kod.

Perpustakaan NumPy membolehkan kita melakukan pelbagai operasi yang perlu dilakukan pada struktur data yang sering digunakan dalam Pembelajaran Mesin dan Sains Data seperti vektor, matriks dan tatasusunan. Kami hanya akan menunjukkan operasi yang paling biasa dengan NumPy yang digunakan dalam banyak saluran Pembelajaran Mesin. Akhirnya, harap maklum bahawa NumPy hanyalah cara untuk melaksanakan operasi, jadi, operasi matematik yang kami tunjukkan adalah fokus utama pelajaran ini dan bukan pakej NumPy itu sendiri. Mari kita mulakan.







Apa itu Vektor?

Menurut Google, Vektor adalah kuantiti yang mempunyai arah dan besarnya, terutama untuk menentukan kedudukan satu titik dalam ruang berbanding dengan titik yang lain.





Vektor sangat penting dalam Pembelajaran Mesin kerana ia tidak hanya menggambarkan besarnya tetapi juga arah ciri. Kita boleh membuat vektor di NumPy dengan coretan kod berikut:





import numpysebagaicth

row_vector = np.array([1,2,3])
mencetak(barisan_vektor)

Dalam coretan kod di atas, kami membuat vektor baris. Kita juga boleh membuat vektor lajur sebagai:

import numpysebagaicth

col_vector = np.array([[1],[2],[3]])
mencetak(col_vector)

Membuat Matriks

Matriks hanya dapat difahami sebagai susunan dua dimensi. Kita boleh membuat matriks dengan NumPy dengan membuat susunan pelbagai dimensi:



matriks = np.array([[1,2,3],[4,5,6],[7,8,9]])
mencetak(matriks)

Walaupun matriks sama persis dengan susunan pelbagai dimensi, struktur data matriks tidak digalakkan kerana dua sebab:

  1. Array adalah standard ketika datang ke pakej NumPy
  2. Sebilangan besar operasi dengan NumPy mengembalikan tatasusunan dan bukan matriks

Menggunakan Matriks Sparse

Untuk mengingatkan, matriks jarang adalah di mana kebanyakan item adalah sifar. Sekarang, senario biasa dalam pemprosesan data dan pembelajaran mesin adalah memproses matriks di mana sebahagian besar elemen adalah sifar. Sebagai contoh, pertimbangkan matriks yang barisnya menerangkan setiap video di Youtube dan lajur mewakili setiap pengguna yang berdaftar. Setiap nilai menunjukkan sama ada pengguna telah menonton video atau tidak. Sudah tentu, majoriti nilai dalam matriks ini akan menjadi sifar. The kelebihan dengan matriks jarang adalah bahawa ia tidak menyimpan nilai yang sifar. Ini menghasilkan kelebihan komputasi dan pengoptimuman penyimpanan juga.

Mari buat matriks percikan di sini:

dari import jarang

original_matrix = np.array([[1,0,3],[0,0,6],[7,0,0]])
sparse_matrix = sparse.csr_matrix(original_matrix)
mencetak(sparse_matrix)

Untuk memahami bagaimana kod berfungsi, kita akan melihat outputnya di sini:

Dalam kod di atas, kami menggunakan fungsi NumPy untuk membuat Baris jarang yang dimampatkan matriks di mana unsur bukan sifar diwakili menggunakan indeks berasaskan sifar. Terdapat pelbagai jenis matriks jarang, seperti:

  • Lajur jarang yang dimampatkan
  • Senarai senarai
  • Kamus kunci

Kami tidak akan menyelami matriks jarang di sini tetapi tahu bahawa setiap penggunaannya adalah khusus dan tidak ada yang boleh disebut sebagai 'terbaik'.

Menerapkan Operasi ke semua elemen Vektor

Ini adalah senario biasa apabila kita perlu menerapkan operasi bersama pada pelbagai elemen vektor. Ini dapat dilakukan dengan mendefinisikan lambda dan kemudian vektorisasi yang sama. Mari kita lihat beberapa coretan kod yang sama:

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

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

vektor_mul_5(matriks)

Untuk memahami bagaimana kod berfungsi, kita akan melihat outputnya di sini:

Dalam coretan kod di atas, kami menggunakan fungsi vektorisasi yang merupakan sebahagian dari perpustakaan NumPy, untuk mengubah definisi lambda sederhana menjadi fungsi yang dapat memproses setiap elemen vektor. Penting untuk diperhatikan bahawa vektorisasi adalah hanya gelung ke atas unsur-unsur dan tidak mempengaruhi prestasi program. NumPy juga membenarkan penyiaran , yang bermaksud bahawa bukannya kod kompleks di atas, kita hanya boleh melakukan:

matriks* 5

Dan hasilnya pasti sama. Saya ingin menunjukkan bahagian yang kompleks terlebih dahulu, jika tidak, anda pasti akan melewatkan bahagian itu!

Maksud, Varians dan Sisihan Piawai

Dengan NumPy, mudah untuk melakukan operasi yang berkaitan dengan statistik deskriptif mengenai vektor. Purata vektor dapat dikira sebagai:

np.bererti(matriks)

Varians vektor dapat dikira sebagai:

np.var(matriks)

Sisihan piawai vektor dapat dikira sebagai:

cth std(matriks)

Output arahan di atas pada matriks yang diberikan diberikan di sini:

Memindahkan Matriks

Transposisi adalah operasi yang sangat biasa yang akan anda dengar setiap kali anda dikelilingi oleh matriks. Transposisi hanyalah cara untuk menukar nilai kolumnar dan baris matriks. Harap maklum bahawa a vektor tidak boleh dialihkan sebagai vektor hanyalah sekumpulan nilai tanpa nilai tersebut dikategorikan menjadi baris dan lajur. Harap maklum bahawa menukar vektor baris menjadi vektor lajur tidak berlaku (berdasarkan definisi aljabar linear, yang berada di luar ruang lingkup pelajaran ini).

Buat masa ini, kita akan menemui kedamaian hanya dengan memindahkan matriks. Sangat mudah untuk mengakses peralihan matriks dengan NumPy:

matriks.T

Output arahan di atas pada matriks yang diberikan diberikan di sini:

Operasi yang sama dapat dilakukan pada vektor baris untuk mengubahnya menjadi vektor lajur.

Meratakan Matriks

Kita boleh menukar matriks menjadi susunan satu dimensi jika kita ingin memproses elemennya secara linear. Ini boleh dilakukan dengan coretan kod berikut:

matrix.flatten()

Output arahan di atas pada matriks yang diberikan diberikan di sini:

Perhatikan bahawa matriks rata adalah susunan satu dimensi, ringkas dalam fesyen.

Mengira Nilai Eigen dan Eigenvektor

Eigenvektor sangat biasa digunakan dalam pakej Pembelajaran Mesin. Oleh itu, apabila fungsi transformasi linear disajikan sebagai matriks, maka X, Eigenvectors adalah vektor yang hanya berubah dalam skala vektor tetapi bukan arahnya. Kita boleh mengatakan bahawa:

Xv = γv

Di sini, X adalah matriks persegi dan γ mengandungi nilai Eigen. Juga, v mengandungi Eigenvectors. Dengan NumPy, mudah untuk mengira Nilai Eigen dan Eigenvektor. Berikut adalah coretan kod di mana kami menunjukkan perkara yang sama:

menilai, evectors = np.linalg.eig(matriks)

Output arahan di atas pada matriks yang diberikan diberikan di sini:

Produk Dot Vektor

Dot Products of Vectors adalah cara mengalikan 2 vektor. Ia memberitahu anda mengenai berapa banyak vektor dalam arah yang sama , berbanding produk silang yang memberitahu anda sebaliknya, betapa sedikit vektor berada dalam arah yang sama (disebut ortogonal). Kami dapat mengira titik titik dua vektor seperti yang diberikan dalam coretan kod di sini:

a = np.array([3,5,6])
b = np.array([2. 3,lima belas,1])

np.dot(a, b)

Keluaran arahan di atas pada susunan yang diberikan diberikan di sini:

Menambah, Menolak dan Mengalikan Matriks

Menambah dan Menolak beberapa matriks adalah operasi yang cukup mudah dalam matriks. Terdapat dua cara di mana ini dapat dilakukan. Mari lihat coretan kod untuk menjalankan operasi ini. Untuk tujuan ini, kami akan menggunakan matriks yang sama dua kali:

np.add(matriks, matriks)

Seterusnya, dua matriks dapat dikurangkan sebagai:

np. tolak(matriks, matriks)

Output arahan di atas pada matriks yang diberikan diberikan di sini:

Seperti yang dijangkakan, setiap elemen dalam matriks ditambahkan / dikurangkan dengan elemen yang sesuai. Mengalikan matriks serupa dengan mencari produk titik seperti yang kita lakukan sebelumnya:

np.dot(matriks, matriks)

Kod di atas akan menemui nilai pendaraban sebenar dua matriks, yang diberikan sebagai:

matriks*matriks

Output arahan di atas pada matriks yang diberikan diberikan di sini:

Kesimpulannya

Dalam pelajaran ini, kami menjalani banyak operasi matematik yang berkaitan dengan Vektor, Matriks dan Susunan yang biasa digunakan Pemprosesan data, statistik deskriptif dan sains data. Ini adalah pelajaran cepat yang merangkumi bahagian yang paling umum dan paling penting dari pelbagai konsep tetapi operasi ini harus memberi idea yang sangat baik tentang semua operasi yang dapat dilakukan ketika berurusan dengan struktur data ini.

Sila kongsi maklum balas anda dengan bebas mengenai pelajaran di Twitter @linuxhint dan @sbmaggarwal (itulah saya!).