Python: Вектори, матрици и масиви с NumPy

Python Vectors Matrices



В този урок ще разгледаме някои чисти съвети и трикове за игра с вектори, матрици и масиви, използващи библиотеката NumPy в Python. Този урок е много добра отправна точка, ако започнете да се занимавате с Data Science и имате нужда от някакъв уводен математически преглед на тези компоненти и как можем да играем с тях, използвайки NumPy в кода.

Библиотеката NumPy ни позволява да извършваме различни операции, които трябва да се извършват върху структури от данни, често използвани в машинното обучение и науката за данни, като вектори, матрици и масиви. Ще покажем само най -често срещаните операции с NumPy, които се използват в много тръбопроводи за машинно обучение. И накрая, имайте предвид, че NumPy е просто начин за извършване на операциите, така че математическите операции, които показваме, са основният фокус на този урок, а не самият пакет NumPy. Да започваме.







Какво е вектор?

Според Google вектор е величина, имаща посока, както и величина, особено като определяща позицията на една точка в пространството спрямо друга.





Векторите са много важни в машинното обучение, тъй като не само описват величината, но и посоката на функциите. Можем да създадем вектор в NumPy със следния кодов фрагмент:





внос numpyкатонапр

row_vector = np.array([1,2,3])
печат(row_vector)

В горния кодов фрагмент създадохме вектор на ред. Можем също така да създадем вектор на колона като:

внос numpyкатонапр

col_vector = np.array([[1],[2],[3]])
печат(col_vector)

Създаване на матрица

Матрицата може просто да се разбира като двуизмерен масив. Можем да направим матрица с NumPy, като направим многоизмерен масив:



матрица = np.array([[1,2,3],[4,5,6],[7,8,9]])
печат(матрица)

Въпреки че матрицата е точно подобна на многоизмерния масив, матричната структура на данните не се препоръчва поради две причини:

  1. Масивът е стандарт, когато става въпрос за пакета NumPy
  2. Повечето операции с NumPy връща масиви, а не матрица

Използване на рядка матрица

Да напомня, че рядка матрица е тази, в която повечето от елементите са нула. Често срещан сценарий при обработката на данни и машинното обучение е обработката на матрици, в които повечето от елементите са нула. Например, помислете за матрица, чиито редове описват всеки видеоклип в Youtube, а колоните представляват всеки регистриран потребител. Всяка стойност представлява дали потребителят е гледал видеоклип или не. Разбира се, по -голямата част от стойностите в тази матрица ще бъдат нула. The предимство с рядка матрица е, че не съхранява нулевите стойности. Това води до огромно изчислително предимство и оптимизация на съхранението.

Нека създадем искрова матрица тук:

от scipy внос оскъден

original_matrix = np.array([[1,0,3],[0,0,6],[7,0,0]])
sparse_matrix = sparse.csr_matrix(original_matrix)
печат(sparse_matrix)

За да разберем как работи кодът, ще разгледаме изхода тук:

В горния код използвахме функция NumPy за създаване на Компресиран рядък ред матрица, където ненулеви елементи са представени с помощта на нулевите индекси. Има различни видове рядка матрица, като:

  • Компресирана рядка колона
  • Списък със списъци
  • Речник на ключовете

Тук няма да се впускаме в други оскъдни матрици, но знайте, че всяка тяхна употреба е специфична и никой не може да бъде наречен „най -добър“.

Прилагане на операции към всички векторни елементи

Това е общ сценарий, когато трябва да приложим обща операция към множество векторни елементи. Това може да стане чрез дефиниране на ламбда и след това векторизиране на същото. Нека да видим фрагмент от код за същото:

матрица = np.array([
[1,2,3],
[4,5,6],
[7,8,9]])

mul_5 = ламбда x: x* 5
vectorized_mul_5 = np.vectorize(mul_5)

векторизиран_мул_5(матрица)

За да разберем как работи кодът, ще разгледаме изхода тук:

В горния кодов фрагмент използвахме функция векторизация, която е част от библиотеката NumPy, за да трансформираме проста дефиниция от ламбда във функция, която може да обработва всеки елемент от вектора. Важно е да се отбележи, че векторизацията е просто цикъл над елементите и няма ефект върху работата на програмата. NumPy също позволява излъчване , което означава, че вместо горния сложен код, можехме просто да направим:

матрица* 5

И резултатът щеше да бъде абсолютно същият. Исках първо да покажа сложната част, в противен случай щяхте да пропуснете раздела!

Средно, вариация и стандартно отклонение

С NumPy е лесно да се извършват операции, свързани с описателна статистика за вектори. Средната стойност на вектора може да се изчисли като:

np.означава(матрица)

Дисперсията на вектора може да се изчисли като:

np.var(матрица)

Стандартното отклонение на вектора може да се изчисли като:

например std(матрица)

Резултатът от горните команди върху дадената матрица е даден тук:

Транспониране на матрица

Транспонирането е много често срещана операция, за която ще чувате винаги, когато сте заобиколени от матрици. Транспонирането е просто начин за размяна на колонни и редови стойности на матрица. Моля, обърнете внимание, че a вектор не може да бъде транспониран като вектор е просто колекция от стойности, без тези стойности да са категоризирани в редове и колони. Моля, обърнете внимание, че преобразуването на векторен ред в вектор на колона не е транспониране (въз основа на дефинициите за линейна алгебра, което е извън обхвата на този урок).

Засега ще намерим мир само като транспонираме матрица. Достъпът до транспонирането на матрица с NumPy е много лесен:

матрица.T

Резултатът от горната команда върху дадената матрица е даден тук:

Същата операция може да се извърши върху вектор на ред, за да се преобразува във вектор на колона.

Изравняване на матрица

Можем да преобразуваме матрица в едноизмерен масив, ако искаме да обработваме нейните елементи по линеен начин. Това може да стане със следния кодов фрагмент:

матрица.изравнете()

Резултатът от горната команда върху дадената матрица е даден тук:

Обърнете внимание, че сплесканата матрица е едноизмерен масив, просто линеен по начин.

Изчисляване на собствени стойности и собствени вектори

Собствените вектори са много често използвани в пакетите за машинно обучение. Така че, когато функцията за линейна трансформация е представена като матрица, тогава X, собствените вектори са векторите, които се променят само в мащаба на вектора, но не и в неговата посока. Можем да кажем, че:

Xv = γv

Тук X е квадратната матрица и γ съдържа собствените стойности. Също така v съдържа собствените вектори. С NumPy е лесно да се изчислят собствени стойности и собствени вектори. Ето кодовия фрагмент, където демонстрираме същото:

оценява, evectors = np.linalg.eig(матрица)

Резултатът от горната команда върху дадената матрица е даден тук:

Точкови продукти на вектори

Точковите продукти на векторите е начин за умножаване на 2 вектора. Разказва ви за колко от векторите са в една и съща посока , за разлика от кръстосаното произведение, което ви казва обратното, колко малко са векторите в една и съща посока (наречени ортогонални). Можем да изчислим точковото произведение на два вектора, както е дадено в кодовия фрагмент тук:

a = np.масив([3,5,6])
b = np.масив([2. 3,петнадесет,1])

np.dot(а, б)

Резултатът от горната команда за дадените масиви е даден тук:

Добавяне, изваждане и умножение на матрици

Добавянето и изваждането на множество матрици е доста проста операция в матриците. Има два начина, по които това може да стане. Нека да разгледаме кодовия фрагмент, за да извършим тези операции. За да поддържаме това просто, ще използваме една и съща матрица два пъти:

np.add(матрица, матрица)

След това две матрици могат да бъдат извадени като:

np.изваждане(матрица, матрица)

Резултатът от горната команда върху дадената матрица е даден тук:

Както се очаква, всеки от елементите в матрицата се добавя/изважда със съответния елемент. Умножаването на матрица е подобно на намирането на точков продукт, както направихме по -рано:

np.dot(матрица, матрица)

Горният код ще намери истинската стойност на умножение на две матрици, дадена като:

матрица*матрица

Резултатът от горната команда върху дадената матрица е даден тук:

Заключение

В този урок преминахме през много математически операции, свързани с вектори, матрици и масиви, които обикновено се използват за обработка на данни, описателна статистика и наука за данни. Това беше бърз урок, обхващащ само най -често срещаните и най -важни раздели от голямото разнообразие от концепции, но тези операции трябва да дадат много добра представа за това какви всички операции могат да се извършват, докато се работи с тези структури от данни.

Моля, споделете свободно отзивите си за урока в Twitter с @linuxhint и @sbmaggarwal (това съм аз!).