Наука за данните

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

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

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

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

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

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

импортиране на numpy като np
row_vector = np.масив ([1,2,3])
печат (ред_вектор)

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

импортиране на numpy като np
col_vector = np.масив ([[1], [2], [3]])
печат (col_vector)

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

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

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

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

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

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

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

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

от scipy внос оскъден
оригинална_матрица = np.масив ([[1, 0, 3], [0, 0, 6], [7, 0, 0]])
sparse_matrix = оскъден.csr_matrix (оригинална_матрица)
печат (рядка_матрица)

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

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

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

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

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

матрица = np.масив ([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
mul_5 = ламбда x: x * 5
vectororized_mul_5 = np.vectorize (mul_5)
vectororized_mul_5 (матрица)

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

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

матрица * 5

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

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

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

np.средно (матрица)

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

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

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

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

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

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

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

Засега ще намерим мир само чрез транспониране на матрица. Много е лесно да получите достъп до транспонирането на матрица с NumPy:

матрица.T

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

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

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

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

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

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

Имайте предвид, че сплесканата матрица е едномерен масив, просто линеен по мода.

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

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

Xv = γv

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

оценява, evectors = np.линалг.собствен (матрица)

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

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

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

a = np.масив ([3, 5, 6])
b = np.масив ([23, 15, 1])
np.точка (а, б)

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

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

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

np.добавяне (матрица, матрица)

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

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

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

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

np.точка (матрица, матрица)

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

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

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

Заключение

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

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

Най-добрите игри за команден ред за Linux
Командният ред не е само най-големият ви съюзник при използване на Linux - той може да бъде и източник на забавление, защото можете да го използвате, ...
Най-добрите приложения за картографиране на геймпад за Linux
Ако искате да играете игри на Linux с геймпад вместо типична система за въвеждане на клавиатура и мишка, има някои полезни приложения за вас. Много ко...
Полезни инструменти за геймърите на Linux
Ако искате да играете игри на Linux, има вероятност да сте използвали приложения и помощни програми като Wine, Lutris и OBS Studio, за да подобрите иг...