Питхон: Вектори, матрице и низови са НумПи

Python Vectors Matrices



У овој лекцији ћемо погледати неке згодне савете и трикове за игру са векторима, матрицама и низовима користећи НумПи библиотеку у Питхону. Ова лекција је врло добра полазна тачка ако почињете са Дата Сциенце -ом и потребан вам је уводни математички преглед ових компоненти и како се можемо играти с њима користећи НумПи у коду.

НумПи библиотека нам омогућава извођење различитих операција које је потребно извршити на структурама података које се често користе у машинском учењу и науци о подацима, попут вектора, матрица и низова. Показаћемо само најчешће операције са НумПи -ом које се користе у многим каналима за машинско учење. На крају, имајте на уму да је НумПи само начин извођења операција, па су математичке операције које приказујемо главни фокус ове лекције, а не сам пакет НумПи. Хајде да почнемо.







Шта је вектор?

Према Гоогле -у, вектор је величина која има смер и величину, посебно за одређивање положаја једне тачке у простору у односу на другу.





Вектори су веома важни у машинском учењу јер не описују само величину, већ и смер карактеристика. Можемо створити вектор у НумПи -у са следећим исечком кода:





увоз нумпикаона пример

ров_вецтор = нп.арраи([1,2,3])
принт(ров_вецтор)

У горњем фрагменту кода креирали смо вектор реда. Такође можемо створити вектор колоне као:

увоз нумпикаона пример

цол_вецтор = нп.арраи([[1],[2],[3]])
принт(цол_вецтор)

Прављење матрице

Матрица се може једноставно схватити као дводимензионални низ. Матрицу можемо направити са НумПи-ом тако што ћемо направити вишедимензионални низ:



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

Иако је матрица потпуно слична вишедимензионалном низу, матрична структура података се не препоручује из два разлога:

  1. Низ је стандард када је у питању пакет НумПи
  2. Већина операција са НумПи враћа низове, а не матрицу

Коришћење оскудне матрице

Да подсетимо, ретка матрица је она у којој је већина ставки нула. Сада је уобичајен сценарио у обради података и машинском учењу обрада матрица у којима је већина елемената нула. На пример, размислите о матрици чији редови описују сваки видео запис на Иоутубе -у, а колоне представљају сваког регистрованог корисника. Свака вредност представља да ли је корисник гледао видео или није. Наравно, већина вредности у овој матрици биће нула. Тхе предност са ретком матрицом је да не складишти вредности које су нуле. Ово резултира великом рачунарском предношћу и оптимизацијом простора за складиштење.

Креирајмо матрицу искре овде:

од сципи увоз оскудан

оригинал_матрик = нп.арраи([[1,0,3],[0,0,6],[7,0,0]])
спарсе_матрик = спарсе.цср_матрик(оригинал_матрик)
принт(спарсе_матрик)

Да бисмо разумели како код функционише, погледаћемо излаз овде:

У горњем коду користили смо НумПи -ову функцију за креирање Компримовани ретки ред матрица где су елементи различити од нуле представљени помоћу индекса заснованих на нули. Постоје различите врсте ретке матрице, попут:

  • Компримовани ретки стуб
  • Списак спискова
  • Речник кључева

Овде нећемо залазити у друге ретке матрице, али знајте да је свака њихова употреба специфична и нико се не може назвати „најбољим“.

Примена операција на све векторске елементе

Уобичајен је сценарио када морамо применити заједничку операцију на више векторских елемената. Ово се може урадити дефинисањем ламбде, а затим векторизацијом исте. Погледајмо неки исечак кода за исти:

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

мул_5 = ламбда к: к* 5
вецторизед_мул_5 = нп.вецторизе(мул_5)

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

Да бисмо разумели како код функционише, погледаћемо излаз овде:

У горњем фрагменту кода, користили смо функцију векторизације која је део НумПи библиотеке, да бисмо једноставну ламбда дефиницију трансформисали у функцију која може обрадити сваки елемент вектора. Важно је напоменути да је векторизација само петља преко елемената и нема утицаја на перформансе програма. НумПи такође дозвољава емитовање , што значи да смо уместо горњег сложеног кода могли једноставно да урадимо:

матрица* 5

А резултат би био потпуно исти. Желео сам прво да покажем сложени део, иначе бисте прескочили одељак!

Средња вредност, варијација и стандардна девијација

Са НумПи -ом је лако изводити операције везане за описну статистику вектора. Средња вредност вектора може се израчунати на следећи начин:

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

Варијанта вектора може се израчунати на следећи начин:

нп.вар(матрица)

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

нпр. стд(матрица)

Овде се даје излаз горе наведених команди на датој матрици:

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

Транспонирање је врло честа операција о којој ћете чути кад год сте окружени матрицама. Транспоновање је само начин да се замене колумне и редовне вредности матрице. Имајте на уму да је а вектор се не може транспоновати као вектор је само збир вредности без да су те вредности категорисане у редове и колоне. Имајте на уму да претварање вектора реда у вектор колоне није транспоновање (на основу дефиниција линеарне алгебре, што је изван оквира ове лекције).

За сада ћемо пронаћи мир само транспоновањем матрице. Приступ транспоновању матрице са НумПи -ом је врло једноставан:

матрица.Т

Излаз горње команде на датој матрици је дат овде:

Иста операција се може извршити на вектору реда како би се претворио у вектор колоне.

Поравнавање матрице

Матрицу можемо претворити у једнодимензионални низ ако желимо да њене елементе обрадимо линеарно. Ово се може урадити помоћу следећег исечка кода:

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

Излаз горње команде на датој матрици је дат овде:

Имајте на уму да је спљоштена матрица једнодимензионални низ, једноставно линеаран.

Израчунавање сопствених вредности и сопствених вектора

Властити вектори се врло често користе у пакетима за машинско учење. Дакле, када је функција линеарне трансформације представљена као матрица, тада су Кс, сопствени вектори вектори који се мењају само у размери вектора, али не и у његовом смеру. Можемо рећи да:

Ксв = γв

Овде је Кс квадратна матрица и γ садржи сопствене вредности. Такође, в садржи сопствене векторе. Са НумПи -ом је лако израчунати сопствене вредности и сопствене векторе. Ево исечка кода где демонстрирамо исто:

оцењује, евецторс = нп.линалг.еиг(матрица)

Излаз горње команде на датој матрици је дат овде:

Тачкасти производи вектора

Тачкасти производи вектора је начин множења 2 вектора. Говори вам о колико је вектора у истом смеру , за разлику од умреженог производа који вам говори супротно, колико су мали вектори у истом смеру (названи ортогонални). Можемо израчунати тачкасти производ два вектора како је дато у исечку кода овде:

а = нп.мат([3,5,6])
б = нп. низ([2. 3,петнаест,1])

нп.дот(а, б)

Излаз горње команде на датим низовима је дат овде:

Сабирање, одузимање и множење матрица

Сабирање и одузимање више матрица је прилично једноставна операција у матрицама. Постоје два начина на која се то може учинити. Погледајмо исечак кода за извођење ових операција. Да бисмо ово поједноставили, користићемо исту матрицу два пута:

нп.адд(матрица, матрица)

Даље, две матрице се могу одузети као:

нп.субтрацт(матрица, матрица)

Излаз горње команде на датој матрици је дат овде:

Очекивано, сваки од елемената у матрици се додаје/одузима са одговарајућим елементом. Множење матрице је слично проналажењу тачкастог производа као што смо то учинили раније:

нп.дот(матрица, матрица)

Горњи код ће пронаћи праву вредност множења две матрице, дату као:

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

Излаз горње команде на датој матрици је дат овде:

Закључак

У овој лекцији смо прошли кроз многе математичке операције везане за векторе, матрице и низове који се обично користе за обраду података, описну статистику и науку о подацима. Ово је била кратка лекција која покрива само најчешће и најважније секције широког спектра концепата, али ове операције би требале дати врло добру идеју о томе које све операције се могу извести док се ради са овим структурама података.

Молимо вас да слободно поделите своје повратне информације о лекцији на Твиттеру @линукхинт и @сбмаггарвал (то сам ја!).