Это старая версия Информатика/Архив/2017/11Б1/numpy за 28.12.2016 12:31 под редакцией SergeyShashkov.

Просмотр кода страницы numpy страница

**Во-первых**, нужно установить сборку питона под названием анаконда с сайта https://www.continuum.io/downloads
(брать версию для python 3.5, версию для x64, если у вас 64-х битная ось)

**Во-вторых**, рекомендуется переходить на IDE ((https://www.jetbrains.com/pycharm/download/#section=windows PyCharm)), который имеет достаточно много фич, которые нам будут удобны.
Основные -- это большое количество подсказок в процессе написания кода.
Основные hot key:
Ctrl+Alt+E -- выполнить выделенный код в консоли
Shift+Ctrl+F10 -- запустить текущий скрипт целиком в отдельном процессе


**Ссылки по теме:**
Если вы знаете английски, то лучше всего подойдёт оригинальный tutorial: https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

Иначе можно начать со странички https://pythonworld.ru/numpy/1.html


----

----

==Задачи==
01. Массив нулей
  На вход даётся число n. Выведите массив нулей n на n

02. Числа на диагонали
  На вход даётся число n. Выведите массив размера n на n,
  в котором по диагонали идут числа 0 до n-1, а остальные числа равны 0

03. Числа в нулевой строке
  На вход даётся число n. Выведите массив размера n на n,
  в котором в первой строчке идут числа от 0 до n-1, а остальные числа равны 0

04. Сбитый прицел
  На вход даётся числа n, r, c. Выведите массив размера n на n, в котором
  в строке r и столбце c стоят 1, а остальные числа равны 0

05. Почётные единицы
  На вход даётся число n. Выведите массив размера n на n,
  в котором в чётных строчках стоят 1, а в нечётных --- нули

06. Решето
  На вход даётся числа n, r, c. Выведите массив размера n на n, в котором
  в котором в каждой R-ой строчке и в каждом C-ом столбце стоят 1

07. Шахматы единиц
  На вход даётся число n. Выведите массив размера n на n,
  имеющий вид шахматной доски.

08. Разлиновка
  На вход даётся число n. В следующей строке идёт несколько чисел. Выведите массив размера n на n,
  в котором в строках с перечисленными выше индексами стоят 1.

09. Порядок индексов
  Даны числа w и h --- ширина и высота картинки в пикселях.
  Создайте подходящий массив, в котором можно хранить трёхцветную картинку данной ширины и высоты.
  При этом данные в памяти должны храниться так, чтобы сначала шли три цвета одного пикселя,
  затем цвета следующего пикселя в этой же строчке или первый пиксель из следующей строчки.

10. Картинки
  Скачайте картинки: file:/30x60g.png и file:/30x60c.png. Прочитайте их в numpy-массив при помощи команд вида
  ##from skimage import io##
  ##img = io.imread('30x60g.png')##
  Сохранять изменённые картинки можно при помощи команды
  ##from skimage import io##
  ##io.imsave('res.png', img)##
  Извлеките из цветной картинки только зелёный слой и сохраните в отдельный файл.

11. Состыковка
  Состыкуйте две ч/б картинки так, чтобы получилась картинка 60х60, и 30х120. Сохраните их в отдельные файлы.
  Сделайте то же самое с цветными картинками.

12. Вставка
  Добавьте в ч/б картинку по центру белую вертикальную полосу шириной в 10 пикселей. Сохраните картинку в отдельный файл.
  Добавьте ещё и горизонтальную серую полосу.
  Теперь в цветную картинку добавьте зелёную вертикальную полосу и красную горизонтальную (каждую по центру, шириной 10 пикселей)

13. Удаление 
  Удалите из картинок центральную полосу шириной в 10 пикселей (всё аналогично 12-й задаче).

14. Отрезок
  Создайте белую картинку 100х100 пикселей. 
  Проведите на ней отрезок из точки (x1,y1) в точку (x2,y2).
  Сохраните картинку в файл (или нагуглите, как её показать прямо из программы).

15. Случайное подмножество строк
  Дан массив размера HxW и число k.
  Отберите случайные k строк из массива и сформируйте из них массив размера kxW.

16. Перемешать строки
  Перемешайте случайным образом строки прямоугольного массива

17. Индекс в массиве
  Дан массив размерности (6,7,8). Каков индекс (x,y,z) сотого элемента?

18. Поменять знак
  Дан массив, поменять знак у элементов, значения которых между 3 и 8

19. Заменить все максимумы
  Дан массив. Заменить все значения, равные максимальному, на -1.

20. Ближайшее
  Найти ближайшее к заданному значению число в заданном массиве

21. Сортировка
  Отсортировать данный линейный массив

22. argsort
  Для каждого элемента данного линейного массива найдите позицию, на которую он попадёт, если массив отсортировать

23. argsort - 2
  Даны три линейных массива длины N. В первом массиве хранятся стоимости брусков, во втором - длины, а в третьем - массы. Отсортируйте массивы так, чтобы данные по брускам шли в порядке возрастания стоимости.

24. Нормировка
  Дан массив действительных чисел. Отнормируйте (X -> aX+b) его так, чтобы все числа лежали на отрезке [0,1] и значения 0 и 1 принимались. Гарантируется, что в массиве есть хотя бы два различных числа.


----

----

==matplotlib==

Основным материалом будет следующий ресурс: http://nbviewer.jupyter.org/github/whitehorn/Scientific_graphics_in_python/tree/master/


===Задача 1===
Глобальная задача: увидеть, что в питоне для умножения больших чисел используется алгоритм Карацубы, а также получить практически его асимптотику.
Должен получиться график в духе такого:

file:/py_vs_gmp_2.png



===Задача 2===
((https://goo.gl/q0GTLk Ирисы Фишера))
from sklearn import datasets
# После этой команды будет загружен словарь  (выполнить один раз)
iris = datasets.load_iris()

# Сохраняем данные на компьютер (выполнить один раз)
# data, target, feature_names, target_names = iris['data'], iris['target'], iris['feature_names'], iris['target_names']
# with open(r'M:\np_basic\iris.dump', 'wb') as f:
#     pickle.dump((data, target, feature_names, target_names), f)

# Загрузка данных из сохранённого дампа
with open(r'M:\np_basic\iris.dump', 'rb') as f:
    (data, target, feature_names, target_names) = pickle.load(f)


file:/iris_dataset_scatterplot.svg.png





===Задача 3===
====Титаник====

Данные:
file:/titanic_train.csv

##import numpy as np##
##import pandas as pd##
##titanic_df = pd.read_csv("titanic_train.csv")##
### Вектор ответов##
##y_train = titanic_df['Survived'].as_matrix()##
### Удаляем ненужные столбцы##
##titanic_df.drop(['PassengerId','Name','Ticket','Survived'], axis=1, inplace=True)##
### Данные##
##columns = titanic_df.columns##
##x_train = titanic_df.as_matrix()##

Описание столбцов:

  * PassengerId — идентификатор пассажира
  * Survival — поле в котором указано спасся человек (1) или нет (0)
  * Pclass — содержит социально-экономический статус:
    * высокий
    * средний
    * низкий
  * Name — имя пассажира
  * Sex — пол пассажира
  * Age — возраст
  * SibSp — содержит информацию о количестве родственников 2-го порядка (муж, жена, братья, сетры)
  * Parch — содержит информацию о количестве родственников на борту 1-го порядка (мать, отец, дети)
  * Ticket — номер билета
  * Fare — цена билета
  * Cabin — каюта
  * Embarked — порт посадки
    * C — Cherbourg
    * Q — Queenstown
    * S — Southampton

file:/__results___7_2.png
file:/__results___7_3.png
file:/__results___9_2.png

Для ((https://www.kaggle.com/c/titanic/data kaggle)):
file:/titanic_test.csv

##test_df = pd.read_csv("train.csv")##
### Сохраняем ID пассажиров##
##PassengerIds = test_df['PassengerId'].as_matrix()##
### Удаляем ненужные столбцы##
##test_df.drop(['PassengerId','Name','Ticket','Survived'], axis=1, inplace=True)##
### Делаем предсказание##
##y_pred = np.zeros_like(PassengerIds)##
### Генерим ответ##
##submission = pd.DataFrame({"PassengerId": PassengerIds, "Survived": y_pred})##
##submission.to_csv('titanic_submission.csv', index=False)##