Основы NumPy ndarray для новичков в глубоком обучении: array, dtype, shape, reshape, astype
1. Зачем начинать с ndarray?
При работе с глубоком обучением вы постоянно сталкиваетесь с такими кодами.
- Проверка
shapeвходного тензора - Использование
reshapeдля батчей - Перевод в
float32для GPU‑вычислений…
Всё это основано на NumPy ndarray.
Tensorв PyTorch – почти прямой наследник структуры NumPyndarray- Входы, веса и выходы моделей – это все многомерные массивы (тензоры)
Таким образом, понимание ndarray = освоение базовой синтаксики операций с тензорами.
2. Что такое ndarray?
ndarray – это сокращение от N‑dimensional array, то есть «многомерный массив».
- 1‑мерный: вектор
- 2‑мерный: матрица
- 3‑мерный и выше: тензор (пакет изображений, временные ряды, видео и т.д.)
Простой пример:
import numpy as np
x = np.array([1, 2, 3]) # 1‑мерный (вектор)
M = np.array([[1, 2], [3, 4]]) # 2‑мерный (матрица)
print(type(x)) # <class 'numpy.ndarray'>
print(x.ndim, x.shape) # количество измерений, форма
print(M.ndim, M.shape)
ndim: сколько измеренийshape: размерность каждого измерения
3. Насколько похож PyTorch Tensor?
Тензор PyTorch тоже – это «многомерный массив».
import torch
x_np = np.array([[1, 2], [3, 4]]) # NumPy ndarray
x_torch = torch.tensor([[1, 2], [3, 4]]) # PyTorch Tensor
print(type(x_np)) # numpy.ndarray
print(type(x_torch)) # torch.Tensor
print(x_np.shape) # (2, 2)
print(x_torch.shape) # torch.Size([2, 2])
Общие черты:
- Оба – «многомерные числовые массивы»
- Концепции
shape,reshape,dtypeпочти одинаковы - Операции (+, *, @ и т.д.) схожи
Различия (важные для глубоком обучении):
- NumPy: только CPU, без автодифференцирования
- PyTorch Tensor: поддержка GPU, автодифференцирование
Обычно так делят работу:
- Концептуальная практика / эксперименты с формулами / манипуляции данными → NumPy
- Фактическое обучение модели → PyTorch
Чем лучше вы знакомы с ndarray, тем более естественно будет работать с тензорами PyTorch.
4. np.array: базовый способ создания ndarray
Самый базовый конструктор ndarray – это np.array.
4.1 Перевод списка Python → ndarray
import numpy as np
# 1‑мерный массив (вектор)
x = np.array([1, 2, 3])
print(x)
print(x.ndim) # 1
print(x.shape) # (3,)
# 2‑мерный массив (матрица)
M = np.array([[1, 2, 3],
[4, 5, 6]])
print(M)
print(M.ndim) # 2
print(M.shape) # (2, 3)
- Список/список списков →
np.array→ndarray - Таблицы вида
batch_size x feature_dim– тоже такой же формат
4.2 Быстрое создание массивов с начальными значениями
В учебных примерах часто нужны массивы, заполненные нулями, единицами или случайными числами.
zeros = np.zeros((2, 3)) # 2x3 матрица, все нули
ones = np.ones((2, 3)) # 2x3 матрица, все единицы
randn = np.random.randn(2, 3) # случайные числа из нормального распределения
print(zeros.shape) # (2, 3)
Такая же схема почти идентична в PyTorch.
import torch
zeros_t = torch.zeros((2, 3))
ones_t = torch.ones((2, 3))
randn_t = torch.randn((2, 3))
5. dtype: понимание типа данных
dtype – это тип данных внутри массива (int, float, и т.д.).
Часто встречаются:
int32,int64: целыеfloat32,float64: плавающие
Проверим:
x = np.array([1, 2, 3])
print(x.dtype) # обычно int64 или int32
y = np.array([1.0, 2.0, 3.0])
print(y.dtype) # обычно float64
5.1 Создание с указанием dtype
x = np.array([1, 2, 3], dtype=np.float32)
print(x.dtype) # float32
В глубоком обучении обычно используют float32 (PyTorch torch.float32), так как это оптимально для GPU и экономит память.
6. shape: чтение формы данных
shape – это кортеж, показывающий размерность каждого измерения.
import numpy as np
x = np.array([1, 2, 3])
print(x.shape) # (3,)
M = np.array([[1, 2, 3],
[4, 5, 6]])
print(M.shape) # (2, 3)
Типичные примеры в глубоком обучении:
- Вектор признаков:
(feature_dim,)→ например,(3,) - Батч данных:
(batch_size, feature_dim)→ например,(32, 3) - Пакет изображений (PyTorch):
(batch_size, channels, height, width)→ например,(32, 3, 224, 224)
Если вы привыкнете к работе с shape в NumPy, то при ошибках в PyTorch быстрее поймёте, где проблема.
7. reshape: изменение формы
reshape меняет форму массива, но сохраняет общее количество элементов.
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6])
print(x.shape) # (6,)
M = x.reshape(2, 3)
print(M)
print(M.shape) # (2, 3)
Важно:
- После
reshapeобщее число элементов должно оставаться тем же.
7.1 Автоматический расчёт с -1
В батчах и обработке изображений часто используют -1.
-1 означает «вычислить автоматически».
x = np.array([[1, 2, 3],
[4, 5, 6]]) # shape: (2, 3)
# Полностью развернуть в 1‑мерный массив
flat = x.reshape(-1) # shape: (6,)
print(flat)
# Снова в 2 строки, столбцы вычисляются автоматически
M = flat.reshape(2, -1) # shape: (2, 3)
print(M)
В PyTorch аналогично:
import torch
x_t = torch.tensor([[1, 2, 3],
[4, 5, 6]]) # (2, 3)
flat_t = x_t.reshape(-1) # (6,)
M_t = flat_t.reshape(2, -1) # (2, 3)
Понимание reshape упрощает:
flattenfeature map в CNN- Формирование входов
(batch, seq_len, feature)для RNN/LSTM - Перестановку батч‑измерения
8. astype: изменение типа данных
astype меняет тип данных массива.
import numpy as np
x = np.array([1, 2, 3]) # int
print(x.dtype) # int32 или int64
x_float = x.astype(np.float32)
print(x_float)
print(x_float.dtype) # float32
Типичные случаи в глубоком обучении:
- Перевод целочисленных меток в
floatдля расчёта потерь - Приведение
float64кfloat32для совместимости - Подгонка типов перед передачей в PyTorch
Пример:
import torch
import numpy as np
x = np.array([1, 2, 3], dtype=np.int32)
x = x.astype(np.float32) # преобразуем в float32
x_torch = torch.from_numpy(x) # преобразуем в тензор
print(x_torch.dtype) # torch.float32
Если типы не совпадают, в PyTorch может возникнуть ошибка вида «Expected Float but got Double».
9. Итоги: основные конструкции ndarray
В этой статье рассмотрены:
- Что такое
ndarray? – фундаментальная структура многомерных массивов - Связь с PyTorch
Tensor– почти идентичные концепции np.array– создание из списковdtype– типы чисел (int, float, 32/64‑бит)shape– форма данных, ключевой атрибутreshape– изменение формы без потери элементов (использование-1)astype– преобразование типов
Умение быстро работать с этими четырьмя конструкциями позволяет:
- Не паниковать при ошибках формы тензора
- Легко переходить от математических формул к коду
- Быстро следовать примерам PyTorch‑туториалов

Комментариев нет.