Главная страница
Навигация по странице:

  • Массивы

  • Создание массива из

  • Операции с массивами NumPy

  • Операции с массивами NumPy II

  • Выбор элементов из одномерного массива

  • Tanya Manual Adwoa Jeremy Cody

  • Выбор элементов из двумерного массива

  • Tanya Manual Adwoa Jeremy

  • аываыв. ЛБ1_ИИС. Лабораторная работа Знакомство с библиотеками NumPy


    Скачать 77.86 Kb.
    НазваниеЛабораторная работа Знакомство с библиотеками NumPy
    Анкораываыв
    Дата05.05.2023
    Размер77.86 Kb.
    Формат файлаdocx
    Имя файлаЛБ1_ИИС.docx
    ТипЛабораторная работа
    #1110669

    Лабораторная работа 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)

    Задание

    1. Представьте, что вы учитель и вам нужно следить за результатами тестов своего ученика. По первому тесту ученики получили следующие баллы:

    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])

    Задание

    1. Оценки учащегося по третьему тесту хранятся в массиве 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])

    Задание

    1. Давайте найдем среднее значение результатов тестов каждого учащегося, чтобы рассчитать их итоговую оценку за семестр. Начните с добавления трех массивов и сохраните ответ в переменной total_grade. Не забудьте использовать измененные баллы для третьего теста.

    2. Теперь разделите total_grade на количество пройденных тестов, чтобы найти средний балл для каждого ученика. Сохраните ответ в переменной final_grade.

    3. Выведите результат в консоль

    Двумерные массивы

    В 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. В статистике часто используются двумерные массивы для представления набора выборок. Например, если мы подбрасываем монету, мы можем представить каждую орел как 1, а каждый решка как 0.

    Создайте одномерный массив для эксперимента с подбрасыванием монеты, который приводит к получению результатов: орел, решка, решка, орел, решка. Сохраните результат в переменной coin_toss.

    1. Мы снова запускаем эксперимент и получаем следующий результат: решка, решка, орел, орел, орел. Создайте новый массив, который представляет оба результата как один эксперимент. Сохраните новый массив в 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])
    Обратите внимание: когда выбирается несколько элементов, мы получаем массив.

    Задание

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




    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.

    1. Вы хотите сравнить, как справились 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])

    Задание

    1. Результаты тестов наших студентов теперь хранятся в двумерном массиве 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.

    1. У вас запланировано родительское собрание с родителями Коди, и вы хотели бы иметь под рукой все его результаты тестов.

    Выберите все результаты тестов Коди и сохраните их в новом массиве cody_test_scores.

    Логические операции с массивами

    Еще одна полезная вещь, которую могут делать массивы, — это выполнять поэлементные логические операции. Например, предположим, что мы хотим знать, сколько элементов в массиве больше 5. Мы можем легко написать код, который проверяет наличие значения True для каждого элемента в массиве, без использования цикла for:

    >>> a = np.array([10, 2, 2, 4, 5, 3, 9, 8, 9, 7])
    >>> a > 5
    array([True, False, False, False, False, False, True, True, True, True], dtype=bool)

    Затем мы можем использовать логические операторы для оценки и выбора элементов на основе определенных критериев. Чтобы выбрать все элементы из предыдущего массива, которые больше 5, мы должны написать следующее:

    >>> a[a > 5]
    array([10, 9, 8, 9, 7])

    Мы также можем комбинировать логические утверждения для дальнейшего уточнения наших критериев. Для этого мы помещаем каждый оператор в круглые скобки и используем логические операторы, такие как & (и) и | (или).

    В нашем примере мы можем использовать комбинированные операторы, чтобы найти элементы, которые больше пяти или меньше двух:

    >>> a[(a > 5) | (a < 2)]
    array([10, 9, 8, 9, 7])

    Задание

    1. Вы работаете в группе ученых-климатологов, и одна из ваших ролей - принимать еженедельные данные о температуре и вводить их в массивы NumPy для последующего анализа. Датчик регистрирует температуру 4 раза в день в 0:00, 6:00, 12:00 и 18:00. Вам предоставляются данные за последние недели (с понедельника по пятницу) и вас просят создать массив NumPy.

    Начните с импорта пакета numpy.

    1. Создайте массив температур, импортировав данные в CSV-файл temperature_data.csv

    (CSV на основе данных Национального управления океанических и атмосферных исследований). CSV содержит данные:

    43.6, 45.1, 58.8, 53

    47, 44, 58.3, 52.6

    46.7, 44.2, 57.9, 52.2,

    46.5, 44.1, 57.6, 51.9,

    46.2, 43.9, 57.2, 51.5

    1. Проверьте данные, выведя их в терминал.

    Столбцы — это время, начиная с 0:00, а строки - это дни, начиная с понедельника, а значения представляют собой зарегистрированные температуры в это время в эти дни.

    1. Один из исследователей заметил, что датчик был неправильно обнулен, и все зарегистрированные температуры были на 3,0 градуса ниже нуля.

    Исправьте массив так, чтобы показания температуры были точными, и сохраните их в Temperature_fixed.

    1. Другой исследователь спросил у вас значения температуры понедельника. Сохраните их в новом массиве monday_temperas.

    2. «Хммм, интересно, - бормочет исследователь, - можешь также дать мне данные за 6:00 утра по четвергам и пятницам?»

    Сохраните эти данные в новом массиве thursday_friday_morning.

    1. Наконец, настойчивый исследователь теперь хочет, чтобы в течение недели были все высокие и низкие температуры.

    Выберите все температуры ниже 50 или выше 60 градусов и сохраните их в новом массиве temperature_extremes.

    Математические функции NumPy

    В библиотеке NumPy существует множество полезных функций математики, в том числе тригонометрические, в которых X – угол, заданный в радианах.:

    sin(x) – возвращает тригонометрический синус.

    cos(x) - Тригонометрический косинус.

    tan(x) - Тригонометрический тангенс.

    arcsin(x) - Обратный тригонометрический синус.

    arccos(x) - Обратный тригонометрический косинус.

    arctan(x) - Обратный тригонометрический тангенс.

    radians(x) - Преобразует градусную меру угла в радианную.

    В библиотеке NumPy существуют Гиперболические функции, в которых X – угол, заданный в радианах:

    sinh(x) - Гиперболический синус.

    cosh(x) - Гиперболический косинус.

    tanh(x) - Гиперболический тангенс.

    arcsinh(x) - Обратный гиперболический синус.

    arccosh(x) - Обратный гиперболический косинус.

    arctanh(x) - Обратный гиперболический тангенс.

    Данные функции часто применяются в рамках математического моделирования, в том числе в теории нечетких множеств.

    Задание

    В рамках данного задания понадобится знание библиотеки matplotlib. Matplotlib — это библиотека Python, используемая для создания диаграмм и графиков.

    Прежде чем работать с Matplotlib, необходимо импортировать в разрабатываемый модуль Python.

    >>from matplotlib import pyplot as plt

    Или:

    >>import matplotlib.pyplot as plt

    Линейные графики полезны для визуализации того, как переменная изменяется с течением времени.

    Некоторые возможные данные, которые будут отображаться в виде линейного графика:

    Используя методы Matplotlib, следующий код создаст простой линейный график с помощью .plot () и отобразит его с помощью .show ():

    >>x_values = [0, 1, 2, 3, 4]
    >>y_values = [0, 1, 4, 9, 16]
    >>plt.plot(x_values, y_values)
    >>plt.show()

    • x_values - это переменная, содержащая список значений x для каждой точки на нашем линейном графике.

    • y_values - это переменная, содержащая список значений y для каждой точки на нашем линейном графике.

    • plt - это имя, которое мы дали модулю Matplotlib, который мы импортировали в верхней части кода.

    • plt.plot (x_values, y_values) создаст линейный график

    • plt.show () фактически отобразит график



    Теперь с помощью линейных графиков и функций NumPy решить следующие задачи:\

    1. Построить архимедову спираль:



    Столбцы таблицы: n, , x, y.

    Столбец n заполнить целыми числами по порядку от 0 до 96.

    Остальные столбцы рассчитываются по формулам:



    Для получения числа воспользоваться встроенной функцией pi модуля math.

    Построить график по данным столбцов x и y.

    1. Построить улитку Паскаля:



    Столбцы таблицы: n, , x, y.

    Столбец n заполнить целыми числами по порядку от 0 до 24.

    Остальные столбцы рассчитываются по формулам:



    Построить график по данным столбцов x и y.

    Задание для закрепления:

    Необходимо разработать функцию, которая позволяет рассчитывать расстояние между двумя точка, зная их координаты (широту и долготу).

    Поскольку Земля имеет форму, приближенную к сфере, расстояние между двумя географическими объектами на ней мы будем искать по формуле Гаверсинуса, которая в преобразованном виде выглядит следующим образом:



    где:

    r – радиус Земли в километрах;
    φ1, φ2 – широта в радианах;
    λ1, λ2 – долгота в радианах;

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

    numpy.radians(x). X – значение в градусах.

    Для начала зададим функцию:

    >>def distance(lat_1, lon_1, lat_2, lon_2):

    В качестве входных параметров используются долгота и широта географических точек.

    Зададим радиус земли:

    >>radius_earth = 6371

    Далее самостоятельно:

    1. Переведите каждое значение долготы и широты в радианы, используя numpy.radians(x).

    2. Рассчитать расстояние d согласно формуле Гаверсинуса, приведенной выше.

    3. Не забудьте оператор return, который возвращает полученное расстояние.

    4. Проверьте работу вашей функции, введя:

    >>print(distance(57.37, 39.51, 57.46, 40.55))

    Должно получится примерно 63 км.

    Для справки функции округления NumPy

    around(a[, decimals, out]) - Равномерное округление до указанной позиции.

    round_(a[, decimals, out]) - Эквивалентна around().

    rint(x) - Округляет до ближайшего целого.

    fix(x[, out]) - Округляет до ближайшего к нулю целого числа.

    floor(x) - Округление к меньшему ("пол").

    ceil(x) - Округление к большему ("потолок").

    trunc(x) - Отбрасывает дробную часть числа.
    Список источников:

    1. Материалы codecademy.com

    2. Материалы https://numpy.org/

    3. Материалы https://www.pandoge.com/post/743


    написать администратору сайта