NumPy библиотеката ни позволява да изпълняваме различни операции, които трябва да бъдат направени върху структури от данни, често използвани в машинното обучение и науката за данни, като вектори, матрици и масиви. Ще покажем само най-често срещаните операции с NumPy, които се използват в много тръбопроводи за машинно обучение. И накрая, моля, имайте предвид, че NumPy е просто начин за извършване на операциите, така че математическите операции, които показваме, са основният фокус на този урок, а не самият пакет NumPy. Да започваме.
Какво е вектор?
Според Google, Vector е величина, която има посока, както и величина, особено като определяща позицията на една точка в пространството спрямо друга.
Векторите са много важни в машинното обучение, тъй като те не само описват величината, но и посоката на характеристиките. Можем да създадем вектор в NumPy със следния кодов фрагмент:
импортиране на numpy като nprow_vector = np.масив ([1,2,3])
печат (ред_вектор)
В горния кодов фрагмент създадохме вектор на редове. Можем също да създадем вектор на колона като:
импортиране на numpy като npcol_vector = np.масив ([[1], [2], [3]])
печат (col_vector)
Създаване на матрица
Матрицата може просто да се разбере като двуизмерен масив. Можем да направим матрица с NumPy, като направим многомерен масив:
матрица = np.масив ([[1, 2, 3], [4, 5, 6], [7, 8, 9]])печат (матрица)
Въпреки че матрицата е точно подобна на многомерния масив, матричната структура на данните не се препоръчва поради две причини:
- Масивът е стандарт, когато става въпрос за пакета NumPy
- Повечето операции с 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 (това съм аз!).