HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Часто разработчикам приходится изменять размеры массивов. Например, переформатировать исходные данные, чтобы разделить их на подмассивы. В некоторых случаях требуется еще и объединять многомерные данные в единый массив значений. Чтобы решать такие задачи, массивы numpy.ndarray предоставляют набор методов, самым популярным из которых является метод reshape().</p>
1 <p>Часто разработчикам приходится изменять размеры массивов. Например, переформатировать исходные данные, чтобы разделить их на подмассивы. В некоторых случаях требуется еще и объединять многомерные данные в единый массив значений. Чтобы решать такие задачи, массивы numpy.ndarray предоставляют набор методов, самым популярным из которых является метод reshape().</p>
2 <p>В этом уроке разберем, как работать с размерами массивов numpy.ndarray и как получать их производные. Еще поговорим об ограничениях размерности и узнаем, как они помогают оптимизировать работу.</p>
2 <p>В этом уроке разберем, как работать с размерами массивов numpy.ndarray и как получать их производные. Еще поговорим об ограничениях размерности и узнаем, как они помогают оптимизировать работу.</p>
3 <h2>Как изменить размер массива</h2>
3 <h2>Как изменить размер массива</h2>
4 <p>Представим, что нам нужно увеличить размер массива numpy.ndarray. Для этого будем идти по следующим шагам:</p>
4 <p>Представим, что нам нужно увеличить размер массива numpy.ndarray. Для этого будем идти по следующим шагам:</p>
5 <ol><li>Узнаем размер массива и индексы вдоль оси</li>
5 <ol><li>Узнаем размер массива и индексы вдоль оси</li>
6 <li>Изменим размер массива</li>
6 <li>Изменим размер массива</li>
7 </ol><p>Рассмотрим каждый этап подробнее.</p>
7 </ol><p>Рассмотрим каждый этап подробнее.</p>
8 <h3>Как узнать размер массива и индексы вдоль оси</h3>
8 <h3>Как узнать размер массива и индексы вдоль оси</h3>
9 <p>Чтобы изменить размер numpy.ndarray, нужно узнать его значение. Для этого используют атрибут shape:</p>
9 <p>Чтобы изменить размер numpy.ndarray, нужно узнать его значение. Для этого используют атрибут shape:</p>
10 <p>В примере выше атрибут shape возвращает кортеж целых чисел. Длина кортежа указывает на размерность массива:</p>
10 <p>В примере выше атрибут shape возвращает кортеж целых чисел. Длина кортежа указывает на размерность массива:</p>
11 <ul><li>(12,) - одномерный массив</li>
11 <ul><li>(12,) - одномерный массив</li>
12 <li>(4, 3) - двумерный массив</li>
12 <li>(4, 3) - двумерный массив</li>
13 <li>(3, 2, 2) - трехмерный массив</li>
13 <li>(3, 2, 2) - трехмерный массив</li>
14 </ul><p>Числа в кортеже означают количество элементов по конкретной оси индексов:</p>
14 </ul><p>Числа в кортеже означают количество элементов по конкретной оси индексов:</p>
15 <ul><li>(12,) - 12 значений</li>
15 <ul><li>(12,) - 12 значений</li>
16 <li>(4, 3) - четыре блока значений по три значения в каждом</li>
16 <li>(4, 3) - четыре блока значений по три значения в каждом</li>
17 <li>(3, 2, 2) - три блока значений, каждый из которых состоит из двух блоков по два значения</li>
17 <li>(3, 2, 2) - три блока значений, каждый из которых состоит из двух блоков по два значения</li>
18 </ul><p>Название<strong>ось индексов</strong>отсылает к декартовой системе координат. Вспомним ее основные правила:</p>
18 </ul><p>Название<strong>ось индексов</strong>отсылает к декартовой системе координат. Вспомним ее основные правила:</p>
19 <ul><li>Чтобы построить отрезок или другой одномерный объект, достаточно одной координатной оси</li>
19 <ul><li>Чтобы построить отрезок или другой одномерный объект, достаточно одной координатной оси</li>
20 <li>Чтобы построить квадрат или другой двумерный объект, необходима координатная плоскость из двух перпендикулярных осей</li>
20 <li>Чтобы построить квадрат или другой двумерный объект, необходима координатная плоскость из двух перпендикулярных осей</li>
21 <li>Чтобы построить куб или другой трехмерный объект, нужно три ортогональные оси координат</li>
21 <li>Чтобы построить куб или другой трехмерный объект, нужно три ортогональные оси координат</li>
22 </ul><p>Теперь, когда мы знаем размер исходного массива, можно изменять его форму. Для этого используем метод reshape().</p>
22 </ul><p>Теперь, когда мы знаем размер исходного массива, можно изменять его форму. Для этого используем метод reshape().</p>
23 <h3>Как изменить размер массива с помощью метода reshape()</h3>
23 <h3>Как изменить размер массива с помощью метода reshape()</h3>
24 <p>В Python используется метод reshape(), с помощью которого можно получить двухмерный и трехмерный массив из одномерного. Этот обязательный параметр ожидает новый размер данных, к которому нужно переформатировать исходный массив.</p>
24 <p>В Python используется метод reshape(), с помощью которого можно получить двухмерный и трехмерный массив из одномерного. Этот обязательный параметр ожидает новый размер данных, к которому нужно переформатировать исходный массив.</p>
25 <p>Попробуем получить двумерный массив two_dimensions_array из одномерного массива one_dimension_array. Для этого используем метод reshape() с новым размером данных (4, 3):</p>
25 <p>Попробуем получить двумерный массив two_dimensions_array из одномерного массива one_dimension_array. Для этого используем метод reshape() с новым размером данных (4, 3):</p>
26 <p>Чтобы получить трехмерный массив three_dimensions_array, достаточно также указать нужный размер:</p>
26 <p>Чтобы получить трехмерный массив three_dimensions_array, достаточно также указать нужный размер:</p>
27 <p>Изменять форму массива можно не только от данных меньшей размерности к данным большей размерности. Это можно делать и в обратную сторону.</p>
27 <p>Изменять форму массива можно не только от данных меньшей размерности к данным большей размерности. Это можно делать и в обратную сторону.</p>
28 <p>Попробуем получить исходный одномерный массив one_dimension_array из двумерного массива two_dimensions_array:</p>
28 <p>Попробуем получить исходный одномерный массив one_dimension_array из двумерного массива two_dimensions_array:</p>
29 <p>А тут переформатируем three_dimensions_array в two_dimensions_array:</p>
29 <p>А тут переформатируем three_dimensions_array в two_dimensions_array:</p>
30 <p>Необязательно уменьшать размер последовательно. Например, можно из трехмерного массива получить сразу одномерный:</p>
30 <p>Необязательно уменьшать размер последовательно. Например, можно из трехмерного массива получить сразу одномерный:</p>
31 <p>С помощью атрибута shape можно узнать размерность массива numpy.ndarray. А метод reshape поможет ее уменьшить или увеличить. Однако у этого массива есть ограничения по размеру данных - его нужно соблюдать, чтобы оптимизировать выполнения методов над массивами.</p>
31 <p>С помощью атрибута shape можно узнать размерность массива numpy.ndarray. А метод reshape поможет ее уменьшить или увеличить. Однако у этого массива есть ограничения по размеру данных - его нужно соблюдать, чтобы оптимизировать выполнения методов над массивами.</p>
32 <h2>Какие размеры массива допустимы</h2>
32 <h2>Какие размеры массива допустимы</h2>
33 <p>У массива numpy.ndarray есть ограничения по размеру данных - по осям индексов должны быть данные одного размера. Это ограничение позволяет оптимизировать выполнения методов над массивами. Рассмотрим на примере.</p>
33 <p>У массива numpy.ndarray есть ограничения по размеру данных - по осям индексов должны быть данные одного размера. Это ограничение позволяет оптимизировать выполнения методов над массивами. Рассмотрим на примере.</p>
34 <p>Допустим, нам нужно сконвертировать список из списков длиной три и два:</p>
34 <p>Допустим, нам нужно сконвертировать список из списков длиной три и два:</p>
35 <p>На первый взгляд у нас получился массив numpy.ndarray. Но если внимательно посмотреть на элементы, мы увидим, что получились списки, а не ожидаемые целочисленные массивы. Это ограничит дальнейшую работу с данными, потому что поведение многих методов меняется.</p>
35 <p>На первый взгляд у нас получился массив numpy.ndarray. Но если внимательно посмотреть на элементы, мы увидим, что получились списки, а не ожидаемые целочисленные массивы. Это ограничит дальнейшую работу с данными, потому что поведение многих методов меняется.</p>
36 <p>Попробуем найти в данном массиве максимальный элемент 4. Это приведет к такому результату:</p>
36 <p>Попробуем найти в данном массиве максимальный элемент 4. Это приведет к такому результату:</p>
37 <p>В этом примере мы получили не тот результат, которого ожидали.</p>
37 <p>В этом примере мы получили не тот результат, которого ожидали.</p>
38 <p>Numpy старается предотвращать некорректные действия - для этого в нем есть система предупреждений и подсказок. Но это не значит, что не нужно следить за размером массива. Он играет важную роль в реализации методов библиотеки Numpy, поэтому рекомендуем обращать внимание на этот момент.</p>
38 <p>Numpy старается предотвращать некорректные действия - для этого в нем есть система предупреждений и подсказок. Но это не значит, что не нужно следить за размером массива. Он играет важную роль в реализации методов библиотеки Numpy, поэтому рекомендуем обращать внимание на этот момент.</p>
39 <p>В случае с методом reshape() Numpy вообще не дает совершить некорректную конвертацию массива из 12 элементов в массив из 15 элементов - три блока по пять значений. В этом случае он вызывает исключение:</p>
39 <p>В случае с методом reshape() Numpy вообще не дает совершить некорректную конвертацию массива из 12 элементов в массив из 15 элементов - три блока по пять значений. В этом случае он вызывает исключение:</p>
40 <p>Ограничения по размеру могут добавить неудобств, когда мы увеличиваем или уменьшаем размерность массива. При этом они позволяют не указывать некоторые значения размера, когда мы хотим его изменить.</p>
40 <p>Ограничения по размеру могут добавить неудобств, когда мы увеличиваем или уменьшаем размерность массива. При этом они позволяют не указывать некоторые значения размера, когда мы хотим его изменить.</p>
41 <h2>Как сделать автоматический расчет размера массива</h2>
41 <h2>Как сделать автоматический расчет размера массива</h2>
42 <p>Ограничения на размер массива позволяют не указывать некоторые размеры в методе reshape(). Это можно оставить на автоматический расчет. Для этого нужное значение размерности поменяем на -1:</p>
42 <p>Ограничения на размер массива позволяют не указывать некоторые размеры в методе reshape(). Это можно оставить на автоматический расчет. Для этого нужное значение размерности поменяем на -1:</p>
43 <p>Все преобразования в примере выше дают одинаковый результат. Необходимый размер рассчитывается автоматически, исходя из количества элементов.</p>
43 <p>Все преобразования в примере выше дают одинаковый результат. Необходимый размер рассчитывается автоматически, исходя из количества элементов.</p>
44 <p>Для массивов большей размерности это работает по такому же принципу:</p>
44 <p>Для массивов большей размерности это работает по такому же принципу:</p>
45 <p>Чтобы получить одномерный массив и использовать автоматический расчет, не нужно находить количество элементов. Строки в примере ниже дают одинаковый результат:</p>
45 <p>Чтобы получить одномерный массив и использовать автоматический расчет, не нужно находить количество элементов. Строки в примере ниже дают одинаковый результат:</p>
46 <p>Теперь вы знаете, как определять размерность массива. Вы умеете изменять размер и рассчитывать его автоматически. Чтобы закрепить знания на практике, рассмотрим еще один пример.</p>
46 <p>Теперь вы знаете, как определять размерность массива. Вы умеете изменять размер и рассчитывать его автоматически. Чтобы закрепить знания на практике, рассмотрим еще один пример.</p>
47 <h2>Как размер массива меняется на практике</h2>
47 <h2>Как размер массива меняется на практике</h2>
48 <p>Изменение формы массива помогает подготовить исходные данные - после такой обработки их будет удобнее анализировать и преобразовывать.</p>
48 <p>Изменение формы массива помогает подготовить исходные данные - после такой обработки их будет удобнее анализировать и преобразовывать.</p>
49 <p>Представим сервис платформы продаж, который логирует данные по сетевым магазинам в конце рабочего дня в определенном порядке. Аналитики выгрузили данные из закрытого контура платформы. Так они получили 28 значений подневных продаж сети:</p>
49 <p>Представим сервис платформы продаж, который логирует данные по сетевым магазинам в конце рабочего дня в определенном порядке. Аналитики выгрузили данные из закрытого контура платформы. Так они получили 28 значений подневных продаж сети:</p>
50 <p>Полученный массив данных можно визуализировать в виде такой таблицы:</p>
50 <p>Полученный массив данных можно визуализировать в виде такой таблицы:</p>
51 <h2>Выводы</h2>
51 <h2>Выводы</h2>
52 <p>Метод shape - важный атрибут для структурного описания массива numpy.ndarray. Он помогает узнать размер вдоль каждой оси.</p>
52 <p>Метод shape - важный атрибут для структурного описания массива numpy.ndarray. Он помогает узнать размер вдоль каждой оси.</p>
53 <p>Также стоит пользоваться методом reshape(). Он форматирует исходный массив под нужный размер - при это можно настроить параметры как вручную, так и автоматически.</p>
53 <p>Также стоит пользоваться методом reshape(). Он форматирует исходный массив под нужный размер - при это можно настроить параметры как вручную, так и автоматически.</p>
54 <p>Меняя размер массива, можно получить новые массивы, которые упрощают анализ исходных данных. Главное - соблюдать правила размерности, иначе не получится оптимизировать выполнения методов.</p>
54 <p>Меняя размер массива, можно получить новые массивы, которые упрощают анализ исходных данных. Главное - соблюдать правила размерности, иначе не получится оптимизировать выполнения методов.</p>