Numpy

Друзья, зачем же нам все эти сведения? Как нам поможет сие священное знание Python при работе с Нейронной Сетью?

Нейронная сеть. Звучит это как-то уж слишком по-научному. А мы только научились командовать нашему компьютеру сложить 2 + 2 и здороваться с нами фразой "Hello, world!". Как это поможет нам понять, что за штука такая Нейронная Сеть? Или, быть может, всё гораздо проще? Может у нас на компьютере уже есть эта готовая Нейронная Сеть, где-то просто её надо найти, два раза по ней мышкой кликнуть и тоже ей команды начать раздавать?

И правда, всё ну практически так и будет! Только Нейронная Сеть, это как конструктор Lego, её сначала нужно будет собрать по кирпичикам и блокам, сделать красивой, и уж потом ей команды раздавать. Тут всё остальное уже можно будет как вздумается воспринимать: или в игровой форме, или вообразить себя серьезными программистами, неустанно работающими во благо человечества. Важно одно - всё будет ещё проще, чем сейчас может казаться!

Тут бы уже можно взять деньги и побежать в ближайший магазин за конструктором Lego. Проще ведь разобраться, когда у тебя уже есть в руках всё необходимое. Секунду! Только совсем незадачливый родитель может принести и высыпать Lego в кроватку с новорожденным младенцем. А мы с вами ещё младенцы в нашем деле, у нас этап погремушек и колыбельных. Надо только совсем немножко подрасти. Время летит быстро, не расстраивайтесь!Итак, …

...Простой пример! Каждый день, взрослые на работе неустанно стучат пальцами по кнопкам клавиатуры, то набирая текст, то заполняя какие-то таблицы. Школьники и даже совсем маленькие дети смотрят YouTube, играют в игры на телефонах, планшетах и всяких там плейстейшенах. И плейстейшны, и телефоны, и даже ваш рабочий ноутбук - это, как ни странно, одно и то же. Это компьютеры, разные с виду и по размеру, да, но одинаково работающие внутри. Они говорят на одном языке. Какой это язык?Пайтон, джава, французский? Нет, просто язык из двух циферок - ноль да единица.

Важно ли нам это в данный момент? Не особо. Просто помните о том, что каждый раз, когда вы говорите что-то компьютеру на языке Python, или просто вводите на YouTube "милые котята подборка", до компьютера это в конце концов доходит только в виде длинных строчек из нулей и единиц. Если здесь всё ясно, можно идти дальше.

Мы с вами не зря начали учить команды для компьютера. Например, скажи ему "print ", и вот он уже напечатал что-то для нас на экране. Выучив еще немного разных команд на языке Python мы уже сможем скомандовать компьютеру: "Возьми-ка вот этот блок Lego!", "А теперь поставь-ка вон тот кирпичик поверх этого блока!". Раз-два-три, и зная команды на языке Python, мы уже сможем сказать компьютеру, как построить...нашу с вами первую Нейронную Сеть!

Ну наконец-то! Долгие занудные разъяснения вот-вот выльются во что-то интересное. Только ответим на последний вопрос, который мы себе сегодня уже задавали: Нейронная Сеть тоже понимает команды на языке Python? И да, и нет. Дело в том, что команду собрать Сеть мы отдаём самому компьютеру, и тут наше общение идёт на Python'е. А с Нейронкой всё гораздо интереснее: мы можем попросить её поработать и с числами, и со словами, и даже с текстами и картинками, да что уж там - даже со звуками или музыкой! Но как, как Нейронка поймёт такое большое количество разных вещей? Ведь это не человек как мы с вами!

Нет, не человек, но Нейронка очень старается быть как человек! И она прекрасно всему у нас учиться! Смотрите, мы только что узнали, сколько всего она уже умеет понимать! Для нас с вами дело за малым: понять, как научить нейронку понимать то, что мы хотим. То есть с Нейронкой мы поначалу не общаемся, мы её учим! И тут нам с вами повезло - мы учим Нейронку не одни, у нас будет много самых разных помощников!

Представляем вашему вниманию - помощник номер раз, мсье Нампай. Или, на родном ему языке - NumPy. Фамилия мсье, NumPy, состоит из двух частей - Num(это сокращение от Numerical, означает "числовой") и Py(сокращение от уже знакомого нам Python). Почему такая странная фамилия? Просто фамилия дана нашему мсье по его профессии - он переводчик, переводит всё, что мы захотим в язык чисел.Мы ему картинку - он нам квадратик, полный цифр. Мы ему аудиодорожку - он нам дорожку из чисел. Мы ему стих Маяковского - он нам: "Пардон, друзья, но это у нас с вами снова будут цифры и только цифры!".

Вот так. А всё потому, что Нейронка - дитя компьютера. Язык чисел - её родной. Но нам с вами это не помешает научить Нейронку нашим человеческим знаниям! Ведь у нас с вами есть помощник-переводчик, мсье NumPy.

Каждый раз, когда нам будет необходима помощь мсье NumPy, мы просто будем обращаться к нашему компьютеру с просьбой позвать его, примерно так: ''Дорогой, позови-ка мне сотрудника Нампай из Шестого отдела". А если серьёзно, то на языке Python команда "позови-ка" звучит так: "import".

Вот пример нашей просьбы к компьютеру:

```
import numpy

```

Но, так как вы у нас не абы кто, а начальник серьёзной и влиятельной организации, то для удобства(и, несомненно, для безопасности организации!) у каждого сотрудника существует своё кодовое имя. У мсье NumPy оно тоже есть - "np".

Поэтому вызывать мы его будем тоже соответствующе:

```
import numpy as np

```
Буквально, на языке Python под фразой "import numpy as np" просто имеется в виду: "Позови мне сотрудника NumPy по прозвищу np!"

И вот ценный сотрудник NumPy уже стоит перед вами в вашем кабинете, чтобы узнать, что в Организации должно пройти плановое подтверждение квалификации сотрудников.

Однако не похоже, чтобы NumPy за это переживал, он кажется вполне уверенным в своих силах. Молча взяв бланки для выполнения тестовых заданий, NumPy удаляется, и уже через 15 минут возвращает выполненные тесты нам на стол.

Можно, конечно, и не вживаться в роль большого начальника влиятельной организации, но познакомиться с заданиями, выполненными сотрудником NumPy настоятельно рекомендуется. Из них можно почерпнуть много всего полезного, что в ближайшем будущем поможет нам в работе с нашей загадочной Нейронкой.

Итак, давайте заглянем в бланки с выполненными тестами мсье NumPy

**Задание №1** гласит:

Опишите, пожалуйста, что такое число с вашей точки зрения?

Далее видим чёткий разборчивый ответ, выведенный твёрдой рукой мсье NumPy:

Число, как мне представляется, есть такой же вид данных, как и всё вокруг. Весь окружающий нас мир, во всём его разнообразии - есть один огромный океан информации, если хотите - необъёмный массив данных. А число - это лишь удобная форма кодировки любых данных.

Так, от подобных определений веет какой-то философией, вы согласны? Хмм...впрочем ладно, пусть это будет почвой для размышлений.

**Задание №2**:

Связана ли Ваша специальность с работой с числами? Если да, то в чём её специфика? Если нет - поставьте прочерк.

Ответ:

Да, моя специальность построена напрямую на работе с числами. Суть моей работы в том, что любую информацию я умею представить в виде чисел. Чем больше информации, тем больше требуется и чисел, но я могу проделать работу любого масштаба. А вот простой пример, чтобы лучше понимать, так сказать:

```
a = [1, 2, 3, 4, 5]       # Придумаем просто списочек чисел с незамысловатым названием "a"
np\_a = np.array(a)        # А здесь, под моим авторским псевдонимом "np", превратим его из списочка в массив чисел
np\_a, type(np\_a)          # Давайте посмотрим, что получилось; а командой type() узнаем, чем стал теперь наш былой списочек

(array([1, 2, 3, 4, 5]), numpy.ndarray)

```

Продолжение ответа к заданию №2:

Поясню пример выше: просто списочек "a" - это числа через запятую, которые между собой могут быть не связаны никаким смыслом. Но стоит мне превратить любой такой списочек в массив(да, кстати "array" - как раз и есть слово "массив"), то наши числа сразу становятся одной единой информацией. Посмотрите: если видите тип данных (команда type() ) numpy.ndarray, значит числа в этих данных можно считать элементами одного целого.

Если угодно, я вам такой списочек "а" могу и прямо из воздуха сотворить, и сразу это будет один цельный массив чисел:

```
new\_np\_a = np.arange(1,6)  # Назову его "new\_np\_a", а командой arange(1,6) укажу, где начать отсчёт чисел и где закончить
new\_np\_a                   # Взгляните, что у нас вышло

array([1, 2, 3, 4, 5])

```
Я в своём массиве могу даже сделать числа просто случайными, наугад (это наш сотрудник NumPy всё продолжает свой "развёрнутый" ответ на вопрос).

Вот возьму две команды:

* random (означает "случайный")
* randint (означает "случайный интервал")

Объединю их, укажу границы для значений наших чисел и сколько чисел нам нужно.

И вот что выйдет:

```
arr = np.random.randint(1, 11, 5)       # Назову массив "arr"; от числа 1 до 11 - наши границы, а число 5 - наше количество чисел
                                        # P.S: чуть не забыл - второе число интервала, как тут число 11, никогда не включается в интервал
arr                                     # Ну-с, посмотрим, что вышло

array([6, 2, 5, 9, 3])

```
Комментарий от Университета:

Верно, посмотрите внимательно, что в случае с arange(1,6), что с randint(1,11) - второе число в скобочках никогда не будет включено в наш диапазон. Это так условились между собой язык Python и компьютер. Запомните хорошенько на будущее!

"Так", скажете вы, "Это всё, конечно, здорово, но в чём тут вообще волшебство, да и зачём мне всё это при работе с Нейронной Сетью?"

И ваш вопрос вполне оправдан! Поясним же: если нашей Нейронке просто поднести на блюдечке обычный списочек из цифр, она попросту откажется его воспринимать. Другое дело, если мсье NumPy переведёт его в свой массив - в этом случае Нейронка с радостью рассмотрит такой новый набор чисел. Не подумайте, что Нейронка так глупа, что не понимает любой список. Понять то она поймёт, но её личное предпочтение - работать с организованными числовыми данными, работу по организации которых делает наш помощник NumPy.

В блоке "Numpy" мы изучим следующие темы:

* Типы данных в массивах NumPy
* Размерности массивов
* Индексация