NumPy является краеугольным камнем научных вычислений в Python, и его мощь во многом обусловлена его N-мерным объектом массива, ndarray. Освоение ndarrays является необходимым условием для эффективного использования NumPy. Это руководство представляет собой всестороннее введение в ndarrays, охватывающее их создание, атрибуты и основные операции.
Содержание
Определение Ndarray
NumPy ndarray (N-мерный массив) представляет собой однородный, многомерный контейнер, содержащий элементы одного типа и размера. Представьте его как высоко оптимизированную, сложную версию списка Python, способную обрабатывать данные в нескольких измерениях (1D, 2D, 3D и выше). В отличие от списков Python, которые могут содержать элементы различных типов данных, ndarrays обеспечивают однородность типов, что приводит к значительному увеличению производительности. Эта однородность позволяет выполнять векторизованные операции — применять операции ко всему массиву одновременно, а не поэлементно, что значительно повышает скорость.
Основные характеристики ndarray:
- Однородность: Все элементы имеют один и тот же тип данных.
- Многомерность: Представляет данные в различных измерениях (1D векторы, 2D матрицы, 3D тензоры и т.д.).
- Фиксированный размер: Размер массива фиксируется при создании, и изменение размера обычно включает создание нового массива.
- Векторизованные операции: Поддерживает эффективные поэлементные и операции на уровне массива.
- Эффективность памяти: Хранит данные в смежных блоках памяти, повышая производительность.
Создание Ndarray
Создание ndarrays осуществляется с помощью функций NumPy:
import numpy as np
# Из списка
arr_1d = np.array([1, 2, 3, 4, 5])
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
# С помощью специализированных функций
arr_zeros = np.zeros((2, 3)) # Массив нулей
arr_ones = np.ones((3, 2)) # Массив единиц
arr_arange = np.arange(10) # Последовательность чисел
arr_linspace = np.linspace(0, 1, 5) # Равномерно распределенные числа
arr_random = np.random.rand(2, 2) # Случайные числа
print(arr_1d)
print(arr_2d)
print(arr_zeros)
print(arr_ones)
print(arr_arange)
print(arr_linspace)
print(arr_random)
Атрибуты Ndarray
Объекты Ndarray предлагают несколько важных атрибутов, предоставляющих информацию об их форме, типе данных, размере и многом другом. Понимание этих атрибутов является ключом к эффективной обработке ndarray.
ndim
: Количество измерений массива (осей).shape
: Кортеж, указывающий размер массива вдоль каждого измерения (например, (3, 4) для матрицы 3×4).size
: Общее количество элементов.dtype
: Тип данных элементов (например,int32
,float64
,bool
).itemsize
: Размер (в байтах) каждого элемента.nbytes
: Общий размер (в байтах) массива (itemsize * size
).
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("Количество измерений:", arr.ndim)
print("Форма:", arr.shape)
print("Размер:", arr.size)
print("Тип данных:", arr.dtype)
print("Размер элемента:", arr.itemsize)
print("Общее количество байт:", arr.nbytes)
Основные операции с Ndarray
NumPy предоставляет эффективные поэлементные и операции на уровне массива. Простые арифметические операции (+, -, *, /, //, %, **) векторизованы:
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print("Сложение:", arr1 + arr2)
print("Вычитание:", arr1 - arr2)
print("Умножение:", arr1 * arr2)
print("Деление:", arr1 / arr2)
Более сложные операции (такие как умножение матриц, скалярное произведение и т.д.) также легко доступны.