Введение в структуры NumPy и массивы
Что такое структура NumPy и зачем она нужна?
NumPy – это фундаментальная библиотека для научных вычислений в Python. В её основе лежат многомерные массивы, которые обеспечивают эффективное хранение и обработку числовых данных. Структура NumPy – это, по сути, описание формата данных, хранящихся в массиве. Это позволяет NumPy работать с данными разных типов, организуя их в однородные массивы для оптимизации вычислений.
NumPy структуры необходимы для:
- Эффективного хранения данных: NumPy массивы занимают значительно меньше места в памяти по сравнению со стандартными списками Python, особенно для больших объемов данных.
- Быстрых вычислений: NumPy предоставляет оптимизированные функции для выполнения математических и логических операций над массивами, что значительно ускоряет вычисления.
- Удобной работы с данными: NumPy предоставляет широкий набор инструментов для манипулирования, фильтрации и преобразования массивов.
Различия между структурами NumPy и обычными массивами Python
Главное различие между NumPy массивами и обычными списками Python заключается в том, что NumPy массивы являются однородными, то есть содержат элементы одного и того же типа данных. Списки Python могут содержать элементы разных типов. Эта однородность позволяет NumPy оптимизировать хранение и выполнение операций над массивами.
Кроме того, NumPy массивы поддерживают векторизованные операции, то есть операции, которые выполняются над всеми элементами массива одновременно, без использования явных циклов. Это значительно ускоряет вычисления. Python листы не имеют такой возможности.
Преимущества использования NumPy для работы с числовыми данными
NumPy предоставляет следующие преимущества:
- Производительность: Оптимизированные алгоритмы и векторизованные операции обеспечивают высокую скорость вычислений.
- Экономия памяти: Однородное хранение данных позволяет эффективно использовать память.
- Функциональность: Широкий набор инструментов для манипулирования, фильтрации и преобразования массивов.
- Интеграция: NumPy легко интегрируется с другими библиотеками Python для научных вычислений, такими как SciPy, pandas и scikit-learn.
Преобразование структур NumPy в массивы
Создание структур NumPy на основе различных типов данных (int, float, string)
NumPy массивы можно создавать на основе различных типов данных, таких как целые числа (int), числа с плавающей точкой (float) и строки (string). При создании массива NumPy автоматически определяет подходящий тип данных на основе входных данных.
import numpy as np
# Создание массива целых чисел
int_array = np.array([1, 2, 3, 4, 5], dtype=np.int32)
print(f'{int_array=}')
# Создание массива чисел с плавающей точкой
float_array = np.array([1.0, 2.5, 3.7, 4.2, 5.9], dtype=np.float64)
print(f'{float_array=}')
# Создание массива строк
string_array = np.array(['apple', 'banana', 'cherry'], dtype=np.str_)
print(f'{string_array=}')
Использование numpy.array()
для преобразования структуры в массив
Функция numpy.array()
является основным инструментом для создания NumPy массивов из существующих структур данных, таких как списки, кортежи и другие массивы. Эта функция принимает структуру данных в качестве аргумента и возвращает NumPy массив.
import numpy as np
# Преобразование списка в массив
my_list = [1, 2, 3, 4, 5]
numpy_array = np.array(my_list)
print(f'{numpy_array=}')
# Преобразование кортежа в массив
my_tuple = (6, 7, 8, 9, 10)
numpy_array = np.array(my_tuple)
print(f'{numpy_array=}')
Изменение типа данных массива при преобразовании (astype)
Метод astype()
позволяет изменять тип данных существующего массива. Это может быть полезно, если требуется изменить точность представления данных или преобразовать данные в другой тип.
import numpy as np
# Создание массива целых чисел
int_array = np.array([1, 2, 3, 4, 5])
# Преобразование в массив чисел с плавающей точкой
float_array = int_array.astype(np.float64)
print(f'{float_array=}')
# Преобразование в массив строк
string_array = int_array.astype(np.str_)
print(f'{string_array=}')
Работа с многомерными структурами и их преобразование
NumPy поддерживает многомерные массивы, которые представляют собой массивы массивов. Многомерные массивы используются для представления матриц, тензоров и других сложных структур данных.
import numpy as np
# Создание двумерного массива (матрицы)
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(f'{matrix=}')
# Доступ к элементам массива
print(f'{matrix[0, 1]=}') # Доступ к элементу в первой строке и втором столбце
# Изменение формы массива
reshaped_matrix = matrix.reshape((1, 9))
print(f'{reshaped_matrix=}') # Преобразование в одномерный массив
Методы работы с массивами NumPy
Доступ к элементам массива (индексация и срезы)
Доступ к элементам массива осуществляется с помощью индексации и срезов. Индексация позволяет получить доступ к отдельным элементам массива, а срезы – к подмножествам элементов.
import numpy as np
# Создание массива
array = np.array([10, 20, 30, 40, 50])
# Доступ к элементу по индексу
print(f'{array[0]=}') # Первый элемент
print(f'{array[-1]=}') # Последний элемент
# Срезы
print(f'{array[1:4]=}') # Элементы со второго по четвертый
print(f'{array[:3]=}') # Первые три элемента
print(f'{array[::2]=}') # Каждый второй элемент
Основные атрибуты массива: shape
, dtype
, ndim
, size
Каждый NumPy массив имеет несколько важных атрибутов:
shape
: Форма массива (размерность по каждой оси).dtype
: Тип данных элементов массива.ndim
: Количество измерений массива.size
: Общее количество элементов в массиве.
import numpy as np
# Создание массива
matrix = np.array([[1, 2, 3], [4, 5, 6]])
# Атрибуты массива
print(f'{matrix.shape=}')
print(f'{matrix.dtype=}')
print(f'{matrix.ndim=}')
print(f'{matrix.size=}')
Изменение формы массива (reshape
, flatten
) и размера (resize
)
Методы reshape()
и flatten()
позволяют изменять форму массива, а метод resize()
– его размер.
import numpy as np
# Создание массива
array = np.array([1, 2, 3, 4, 5, 6])
# Изменение формы
reshaped_array = array.reshape((2, 3))
print(f'{reshaped_array=}')
# Преобразование в одномерный массив
flattened_array = reshaped_array.flatten()
print(f'{flattened_array=}')
# Изменение размера
resized_array = np.resize(array, (2, 4))
print(f'{resized_array=}')
Операции над массивами: поэлементные операции, скалярные операции
NumPy поддерживает различные операции над массивами, включая поэлементные операции (сложение, вычитание, умножение, деление) и скалярные операции (операции с числом и массивом).
import numpy as np
# Создание массивов
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
# Поэлементные операции
print(f'{array1 + array2=}')
print(f'{array1 * array2=}')
# Скалярные операции
print(f'{array1 + 10=}')
print(f'{array1 * 2=}')
Математические функции NumPy (sin, cos, exp, log и др.)
NumPy предоставляет широкий набор математических функций для работы с массивами, таких как синус, косинус, экспонента, логарифм и др. Эти функции применяются поэлементно к массиву.
import numpy as np
# Создание массива
array = np.array([0, np.pi / 2, np.pi])
# Математические функции
print(f'{np.sin(array)=}')
print(f'{np.cos(array)=}')
print(f'{np.exp(array)=}')
Линейная алгебра в NumPy (матричные операции)
NumPy предоставляет инструменты для выполнения операций линейной алгебры, таких как умножение матриц, вычисление определителя и обратной матрицы.
import numpy as np
# Создание матриц
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])
# Матричное умножение
print(f'{np.dot(matrix1, matrix2)=}')
# Определитель
print(f'{np.linalg.det(matrix1)=}')
# Обратная матрица
print(f'{np.linalg.inv(matrix1)=}')
Агрегирующие функции (sum, min, max, mean, std)
Агрегирующие функции позволяют вычислять статистические показатели массива, такие как сумма, минимум, максимум, среднее значение и стандартное отклонение.
import numpy as np
# Создание массива
array = np.array([1, 2, 3, 4, 5])
# Агрегирующие функции
print(f'{np.sum(array)=}')
print(f'{np.min(array)=}')
print(f'{np.max(array)=}')
print(f'{np.mean(array)=}')
print(f'{np.std(array)=}')
Условные операции и фильтрация массивов
NumPy позволяет выполнять условные операции над массивами и фильтровать массивы на основе заданных условий.
import numpy as np
# Создание массива
array = np.array([1, 2, 3, 4, 5])
# Условная операция
print(f'{array > 2=}')
# Фильтрация
filtered_array = array[array > 2]
print(f'{filtered_array=}')
Транслирование (broadcasting) в NumPy
Транслирование – это механизм, который позволяет NumPy выполнять операции над массивами разной формы. NumPy автоматически расширяет массивы меньшей размерности до формы большего массива, чтобы выполнить операцию.
import numpy as np
# Создание массивов
array1 = np.array([1, 2, 3])
array2 = np.array([4])
# Транслирование
print(f'{array1 + array2=}')
Продвинутые методы работы со структурами и массивами
Использование структурированных массивов NumPy (structured arrays)
Структурированные массивы позволяют хранить данные разных типов в одном массиве, как в таблице базы данных. Каждый столбец в структурированном массиве имеет свое имя и тип данных.
«`python
import numpy as np
Определение типа данных
dtype = np.dtype([(‘name’, ‘S10’), (‘age’, int), (‘height’, float)])
Создание структурированного массива
people = np.array([(‘Alice’, 25, 1.75), (‘Bob’, 30, 1.80)], dtype=dtype)
Доступ к данным
print(f'{people[