Файл: Лабораторная работа Знакомство с библиотеками NumPy.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 05.12.2023
Просмотров: 21
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Лабораторная работа 1.
Знакомство с библиотеками NumPy
Для работы с наборами данных используется Python, известный как NumPy, что означает числовой Python.
NumPy имеет множество применений, в том числе:
-
Эффективная работа с большим количеством номеров одновременно -
Генерация случайных чисел -
Выполнение множества различных числовых функций (например, вычисление sin, cos, tan, mean, median и т. Д.)
NumPy не является встроенной библиотекой языка python. Поэтому необходимо ее установить и импортировать. Для установки используется команда
pip install numpy
Далее для того, чтобы начать пользоваться библиотекой, ее необходимо подключить к программе. Для этого используется ключевое слово import
import numpy as np
Запись as np позволяет нам использовать np как сокращение для NumPy, что экономит время при вызове функции NumPy. Присваивание таких псевдонимов способствует сокращению ошибок при вводе.
Массивы NumPy
NumPy включает мощную структуру данных, известную как массив. Массив NumPy — это особый тип списка. Это структура данных, которая объединяет несколько элементов. Каждый элемент может быть любого типа (строки, числа или даже другие массивы).
Массивы наиболее эффективны, когда они используются для хранения чисел. Это связано с тем, что массивы дают нам особые способы выполнения математических операций, которые проще писать и более эффективны с точки зрения вычислений. Мы поговорим об этом позже.
Массив NumPy очень похож на список Python:
>>my_array = np.array([1, 2, 3, 4, 5, 6])
Массив NumPy создается на основе итеративного типа данных, в частности, списков. Для этого используется np.array (). Полученный массив можно присвоить переменной:
my_list = [1, 2, 3, 4, 5, 6]
my_array = np.array(my_list)
Задание
-
Представьте, что вы учитель и вам нужно следить за результатами тестов своего ученика. По первому тесту ученики получили следующие баллы:
92, 94, 88, 91, 87
Создайте массив NumPy с этими значениями и сохраните его под именем test_1.
Создание массива из CSV
Существует возможность создания массива из файлов, в частности из файлов в формате CSV (значения, разделенные запятыми) с помощью функции np.genfromtxt ():
Рассмотрим следующий CSV-файл sample.csv,
1,2,3,45
Мы можем импортировать это в массив NumPy, используя следующий код:
>>csv_array = np.genfromtxt('sample.csv', delimiter=',')
Обратите внимание, что разделители в файлах CSV задаются параметром delimiter = ','. Наиболее распространенными разделителями являются табуляции или двоеточия.
Задание
Импортируйте результаты учащегося по второму тесту из CSV test_2.csv (создайте файл самостоятельно, в котором будут содержаться данные: 79, 100, 86, 93, 91) в массив. Сохраните массив с именем test_2.
Операции с массивами NumPy
Как правило, массивы NumPy более эффективны, чем списки. Одна из причин заключается в том, что они позволяют выполнять поэлементные операции. Поэлементная операция позволяет быстро выполнять операцию, например сложение, над каждым элементом массива.
Давайте сравним, как добавить число к каждому значению в списке Python и массиве NumPy:
# With a list
l = [1, 2, 3, 4, 5]
l_plus_3 = []
for i in range(len(l)):
l_plus_3.append(l[i] + 3)
# With an array
a = np.array(l)
a_plus_3 = a + 3
Как мы видим, если бы мы добавили 3 к каждому числу в списке, нам пришлось бы использовать цикл for. С массивом мы можем просто добавить 3. То же самое верно для вычитания, умножения и деления.
Возможно использовать массивы NumPy, чтобы найти квадрат или квадратный корень каждого значения.
Возведение каждого значения в квадрат:
>>> a ** 2
array([ 1, 4, 9, 16, 25, 36])
(Примечание: ** - это обозначение степени в Python. Например, 3 в квадрате можно вычислить с помощью 3 ** 2.)
>>> np.sqrt(a)
array([ 1, 1.41421356, 1.73205081, 2, 2.23606798, 2.44948974])
Задание
-
Оценки учащегося по третьему тесту хранятся в массиве test_3.
Но оказывается, что в одном из вопросов третьего теста была ошибка. Дайте каждому студенту два дополнительных балла и сохраните новый массив в test_3_fixed.
test_3 = np.array([87, 85, 72, 90, 92])
Операции с массивами NumPy II
Массивы также могут быть добавлены или вычтены друг из друга в NumPy, при условии, что массивы имеют одинаковое количество элементов.
При добавлении или вычитании массивов в NumPy каждый элемент будет добавлен / вычтен к соответствующему элементу.
>>> a = np.array([1, 2, 3, 4, 5])
>>> b = np.array([6, 7, 8, 9, 10])
>>> a + b
array([ 7, 9, 11, 13, 15])
Задание
-
Давайте найдем среднее значение результатов тестов каждого учащегося, чтобы рассчитать их итоговую оценку за семестр. Начните с добавления трех массивов и сохраните ответ в переменной total_grade. Не забудьте использовать измененные баллы для третьего теста. -
Теперь разделите total_grade на количество пройденных тестов, чтобы найти средний балл для каждого ученика. Сохраните ответ в переменной final_grade. -
Выведите результат в консоль
Двумерные массивы
В Python можно создавать списки, состоящие из других списков. Точно так же в NumPy можно создать массив массивов. Если все массивы, составляющие больший массив, имеют одинаковый размер, то у него есть специальное имя: двумерный массив.
В предыдущих упражнениях результаты тестов хранились в отдельных одномерных массивах для каждого теста:
test_1 = np.array([92, 94, 88, 91, 87])
test_2 = np.array([79, 100, 86, 93, 91])
test_3 = np.array([87, 85, 72, 90, 92])
Но возможно также сохранить все эти данные в одном двумерном массиве:
np.array([[92, 94, 88, 91, 87],
[79, 100, 86, 93, 91],
[87, 85, 72, 90, 92]])
Здесь каждая строка представляет тест, а каждый столбец представляет учащегося. Это позволяет хранить все данные в одном массиве без потери какой-либо структуры.
Двумерный массив — это список списков, каждый из которых имеет одинаковое количество элементов. Вот несколько примеров, которые не являются двумерными массивами.
Этот код будет исполнен без ошибки, но он не создаст двумерный массив, потому что списки имеют разное количество элементов:
np.array([[29, 49, 6],
[77, 1]])
Этот код выдаст ошибку, потому что [] для внешних списков отсутствует:
np.array([68, 16, 73],
[61, 79, 30])
Задание
-
В статистике часто используются двумерные массивы для представления набора выборок. Например, если мы подбрасываем монету, мы можем представить каждую орел как 1, а каждый решка как 0.
Создайте одномерный массив для эксперимента с подбрасыванием монеты, который приводит к получению результатов: орел, решка, решка, орел, решка. Сохраните результат в переменной coin_toss.
-
Мы снова запускаем эксперимент и получаем следующий результат: решка, решка, орел, орел, орел. Создайте новый массив, который представляет оба результата как один эксперимент. Сохраните новый массив в coin_toss_again.
Выбор элементов из одномерного массива
NumPy массив является последовательным типом, поэтому можно обращаться к его элементам используя их индексы. Рассмотрим одномерный массив
>>a = np.array([5, 2, 7, 0, 11])
Если бы возникла необходимость выбрать первый элемент в этом массиве, мы бы вызывали:
>>> a[0]
Как и в большинстве языков программирования, индексы для массива начинаются с 0. В приведенном выше массиве 5 является нулевым элементом a [0]. Отсюда следует, что 2 — это первый элемент a [1].
Так же массивы NumPy поддерживают отрицательные индексы, которые отсчитываются с противоположного конца массива и начинаются с -1. Это особенно полезно, нужно получить доступ к последнему или двум элементам массива:
>>> a[-1]
11
>>> a[-2]
0
Если мы необходимо выбрать несколько элементов в массиве, можно определить диапазон, например [1: 3], который выберет все элементы от [1] до [3], включая a[1], но исключая а [3].
>>> a[1:3]
array([2, 7])
Точно так же, если необходимо выбрать все элементы перед [3], мы бы использовали:
>>> a[:3]
array([5, 2, 7])
Также возможно использовать отрицательные индексы для выбора нескольких элементов. Допустим, мы хотим выбрать последние 3 элемента в массиве:
>>> a[-3:]
array([7, 0, 11])
Обратите внимание: когда выбирается несколько элементов, мы получаем массив.
Задание
-
Вернемся к результатам тестов наших учеников. В следующей таблице показаны все три массива тестов, выровненные по именам учащихся.
| Tanya__Manual__Adwoa__Jeremy__Cody'>Tanya | Manual | Adwoa | Jeremy | Cody |
test_1 | 92 | 94 | 88 | 91 | 87 |
test_2 | 79 | 100 | 86 | 93 | 91 |
test_3 | 87 | 85 | 72 | 90 | 92 |
Джереми хочет знать, сколько он набрал во втором тесте.
Выберите результат из массива test_2 и сохраните его в переменной jeremy_test_2.
-
Вы хотите сравнить, как справились Manual и Adwoa в первом тесте.
Выберите оба их результата и сохраните их в массиве с именем manual_adwoa_test_1.
Выбор элементов из двумерного массива
Выбор элементов из двумерного массива очень похож на выбор их из одномерного массива, у нас просто есть два индекса для выбора. Синтаксис для выбора из двумерного массива — это [строка, столбец], где a - это массив.
Важно отметить, что, когда мы работаем с массивами, имеющими более одного измерения, отношения между внутренними массивами определяются в терминах осей. Двумерный массив имеет две оси: ось 0 представляет значения, которые имеют одну и ту же индексную позицию (находятся в одном столбце), а ось 1 представляет значения, которые совместно используют массив (находятся в одной строке). Это проиллюстрировано ниже.
Рассмотрим массив
a = np.array([[32, 15, 6, 9, 14],
[12, 10, 5, 23, 1],
[2, 16, 13, 40, 37]])
Возможно выбрать определенные элементы, используя их индексы:
>>> a[2,1]
16
Допустим, необходимо выделить весь столбец, тогда нужно вставить «:» в качестве индекса строки:
# selects the first column
>>> a[:,0]
array([32, 12, 2])
То же самое работает, если необходимо выделить всю строку:
# selects the second row
>>> a[1,:]
array([12, 10, 5, 23, 1])
Возможно еще больше сузить диапазон и выбрать диапазон из определенной строки:
# selects the first three elements of the first row
>>> a[0,0:3]
array([32, 15, 6])
Задание
-
Результаты тестов наших студентов теперь хранятся в двумерном массиве student_scores. В первой строке хранятся результаты первого теста, во второй строке - второго теста, а в третьей строке - третьего теста, как показано в следующей таблице:
| Tanya | Manual | Adwoa | Jeremy | Cody |
test_1 | 92 | 94 | 88 | 91 | 87 |
test_2 | 79 | 100 | 86 | 93 | 91 |
test_3 | 87 | 85 | 72 | 90 | 92 |
student_scores = np.array([[92, 94, 88, 91, 87],
[79, 100, 86, 93, 91],
[87, 85, 72, 90, 92]])
Таня хочет знать, насколько хорошо она сдала третий тест. Выберите ее результат из массива и сохраните его в tanya_test_3.
-
У вас запланировано родительское собрание с родителями Коди, и вы хотели бы иметь под рукой все его результаты тестов.
Выберите все результаты тестов Коди и сохраните их в новом массиве cody_test_scores.
Логические операции с массивами
Еще одна полезная вещь, которую могут делать массивы, — это выполнять поэлементные логические операции. Например, предположим, что мы хотим знать, сколько элементов в массиве больше 5. Мы можем легко написать код, который проверяет наличие значения True для каждого элемента в массиве, без использования цикла for: