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>