NumPy и pandas: практический тренажёрNumPy: массивы, форма и индексацияndarray: создание из последовательностей и атрибуты структуры

ndarray: создание из последовательностей и атрибуты структуры

Уроки курсаndarray: создание из последовательностей и атрибуты структуры

NumPy — это фундамент почти всего числового Python: pandas строит DataFrame поверх него, scikit-learn принимает массивы на вход, а большинство библиотек визуализации ожидают именно numpy-совместимые данные. Центральный объект здесь — ndarray, и с него и начнём.

ndarray как однородный многомерный контейнер

Python-список — гибкая штука: в него можно положить int, строку и ещё один список одновременно. Именно за счёт этой гибкости CPython хранит каждый элемент как отдельный Python-объект с собственным заголовком и счётчиком ссылок. Цена — дополнительная память и медленный доступ при числовых вычислениях.

ndarray устроен принципиально иначе. Его ключевое свойство — однородность: все элементы имеют одинаковый тип данных (dtype), единый для всего массива. Это позволяет NumPy хранить данные компактно и применять к ним векторизованные операции без перебора разнотипных Python-объектов. Физическое расположение данных в памяти — отдельная тема, которая выходит за рамки этого урока; для понимания ndarray достаточно знать, что однородный dtype — это фундаментальное свойство, а не деталь реализации.

Второе обязательное свойство — прямоугольность. Двумерный ndarray — это таблица, где все строки имеют одинаковое количество столбцов. «Рваных» строк разной длины в ndarray быть не может: если передать в np.array вложенные списки разной длины, NumPy поднимет ValueError и не создаст двумерный числовой массив. Это не ограничение, а гарантия: именно прямоугольная структура позволяет описывать форму массива одним кортежем чисел и применять операции ко всем элементам сразу.

Тип элементов — dtype — фиксируется в момент создания массива и единый для всего массива. Если передать список целых чисел, NumPy выберет целочисленный dtype. Если среди элементов окажется хотя бы одно число с плавающей точкой, весь массив станет вещественным — NumPy автоматически приведёт все значения к более широкому типу. Смешать int и строку в одном ndarray без потерь не получится: строки вытеснят числа в Unicode-тип, и арифметика станет недоступна.

Подытоживая модель: ndarray — это прямоугольный массив с элементами одного dtype, форма которого задаётся кортежем целых чисел. Всё остальное в NumPy — конструкторы, операции, индексирование — строится на этой модели.