Библиотека NumPy имеет множество различных функций для работы с многомерными массивами. Функция reshape()
– одна из них. Она используется для изменения формы любого существующего массива без изменения данных, которые в нем находятся.
Форма определяется общим количеством элементов в каждом измерении. С помощью функции reshape()
можно добавлять или удалять измерения в массиве, а также изменять количество элементов в каждом измерении. Например, можно преобразовать одномерный массив в многомерный (но не наоборот!).
В этой статье мы расскажем, как использовать функцию reshape()
и каков принцип ее работы.
Синтаксис
Давайте начнем с синтаксиса функции reshape()
. Вот так он выглядит в общем виде:
numpy.reshape(np_array, new_shape, order='C')
Эта функция может принимать три аргумента. Первый и второй аргументы являются обязательными, а третий — опциональный.
Исходный массив NumPy, форму которого мы хотим изменить, – это значение первого аргумента (np_array
).
Форма массива устанавливается во втором аргументе (new_shape
). Его значение может быть целым числом или кортежем целых чисел.
Значение третьего аргумента определяет порядок заполнения массива и переноса элементов в преобразованном массиве. Возможных значений три: «C», «F» или «A». Давайте разберем, что значит каждый из этих вариантов.
order=’C’
Упорядочивание индексов в стиле языка C. Индекс последней оси изменяется быстрее, а индекс первой — медленнее.
order=’F’
Упорядочивания индексов в стиле языка Фортран. Индекс первой оси изменяется быстрее, а индекс последней — медленнее.
order=’A’
Варианты «C» и «F» не учитывают макет памяти основного массива. Они относятся лишь к порядку индексации. Порядок «A» означает чтение и запись элементов в стиле Фортран, если исходный массив в памяти тоже в стиле Фортран. В противном случае применяется C-подобный стиль.
Использование функции reshape()
Первым делом, прежде чем попрактиковаться в использовании данной функции, вам следует импортировать библиотеку NumPy. После этого можно приступать к работе.
Далее мы покажем различные варианты использования функции reshape()
.
Пример 1: преобразование одномерного массива в двумерный
Итак, давайте разберем, как с помощью функции reshape()
преобразовать одномерный массив в двумерный.
В этом сценарии для создания одномерного массива из 10 элементов используется функция arange()
.
Первая функция reshape()
используется для преобразования одномерного массива в двумерный, состоящий из 2 строк и 5 столбцов. Здесь функция reshape()
вызывается с использованием имени модуля np
.
А вторая функция reshape()
используется для преобразования одномерного массива в двумерный, состоящий из 5 строк и 2 столбцов. Здесь уже функция reshape()
вызывается с использованием массива NumPy с именем np_array
.
import numpy as np np_array = np.arange(10) print("Исходный массив : \n", np_array) new_array = np.reshape(np_array, (2, 5)) print("\n Измененный массив с 2 строками и 5 столбцами : \n", new_array) new_array = np_array.reshape(5, 2) print("\n Измененный массив с 5 строками и 2 столбцами : \n", new_array)
Если вы запустите описанную выше программу, то получите результат, как на следующем скриншоте. Первый print()
показывает исходный массив, а второй и третий выводят преобразованные массивы.
Пример 2: преобразование одномерного массива в трехмерный
Теперь давайте посмотрим, как при помощи функции reshape()
преобразовать одномерный массив в трехмерный.
Воспользуемся функцией array()
для создания одномерного массива из 12 элементов.
Функция reshape()
преобразует созданный одномерный массив в трехмерный размером 2х2х3. Здесь функция reshape()
вызывается с использованием NumPy-массива np_array
.
import numpy as np np_array = np.array([7, 3, 9, 11, 4, 23, 71, 2, 32, 6, 16, 2]) print("Исходный массив : \n", np_array) new_array = np_array.reshape(2, 2, 3) print("\n Преобразованный 3D массив : \n", new_array)
Выполнив данный код, вы получите следующий вывод. Как и в прошлый раз, первый print()
показывает изначальный массив, второй – преобразованный массив.
Пример 3: изменение формы массива NumPy с учетом порядка
Как вы помните, у функции reshape()
есть третий — опциональный — аргумент, задающий порядок индексации. Давайте посмотрим, как он применяется на практике.
Как и в первом примере, воспользуемся функцией arange()
для создания одномерного массива из 15 элементов.
Первая функция reshape()
используется для создания двумерного массива из 3 строк и 5 столбцов с упорядочением в стиле C. В то время как вторая функция reshape()
используется для создания двумерного массива из 3 строк и 5 столбцов с упорядочением в стиле Фортрана.
import numpy as np np_array = np.arange(15) print("Исходный массив : \n", np_array) new_array1 = np.reshape(np_array, (3, 5), order='C') print("\n Преобразованный 2D массив, упорядоченный в стиле С : \n", new_array1) new_array2 = np.reshape(np_array, (3, 5), order='F') print("\n Преобразованный 2D массив, упорядоченный в стиле Фортрана : \n", new_array2)
Давайте выполним наш код. Вот, что мы получим. Как и раньше, первый print()
показывает исходный массив значений. Второй print()
показывает значения массива, упорядоченного по строкам. Третий – упорядоченного по столбцам.
Итоги
Итак, в этой статье мы подробно описали, как использовать функцию reshape()
для преобразования массива из одной формы в другую. Цели и особенности использования данной функции становятся достаточно прозрачными после изучение примеров, которые мы привели выше.
Возможно, вам будет интересно также почитать о сравнении функций numpy.reshape()
и numpy.flatten()
.