Reshape python что это
Функция Python numpy.reshape()
Эй, ребята! Надеюсь, у вас все хорошо. В этой статье мы разберемся в работе функции Python numpy.reshape ().
Как мы все знаем, модуль Python NumPy предоставляет нам огромное количество функций для манипулирования математическими данными и работы с ними. Здесь мы расскажем о функционировании функции Numpy reshape ().
Итак, давайте начнем!
Работа функции Python numpy.reshape()
Давайте теперь разберемся в структуре функции numpy.reshape() в следующем разделе.
Синтаксис функции Python numpy.reshape()
Давайте рассмотрим пример, чтобы понять процесс передачи фигуры в функцию reshape ().
Если у нас есть 16 элементов во входном массиве, поэтому нам нужно передать такие целочисленные значения, как кортеж, в параметр формы, чтобы произведение этих значений кортежа равнялось числу элементов, т. Е. 16.
Параметр shape может иметь следующие возможности:
Давайте теперь рассмотрим приведенные ниже примеры, чтобы лучше понять функцию numpy.reshape ().
Реализация Python numpy.reshape() с примерами
В приведенном ниже примере мы создали 1-D массив из 16 элементов с помощью функции numpy.arange ().
Кроме того, мы изменили размеры массива в 2-D массив из 4 элементов на измерение с помощью функции reshape ().
Теперь мы изменили форму и преобразовали 1-D массив в массив с 2 элементами на измерение.
Вывод
На этом мы подошли к концу этой темы. Не стесняйтесь комментировать ниже, если у вас возникнут какие-либо сомнения. Счастливого Обучения!
Как использовать функцию reshape() библиотеки NumPy в Python
Библиотека NumPy имеет множество различных функций для работы с многомерными массивами. Функция reshape() – одна из них. Она используется для изменения формы любого существующего массива без изменения данных, которые в нем находятся.
Форма определяется общим количеством элементов в каждом измерении. С помощью функции reshape() можно добавлять или удалять измерения в массиве, а также изменять количество элементов в каждом измерении. Например, можно преобразовать одномерный массив в многомерный (но не наоборот!).
В этой статье мы расскажем, как использовать функцию reshape() и каков принцип ее работы.
Синтаксис
Эта функция может принимать три аргумента. Первый и второй аргументы являются обязательными, а третий — опциональный.
Исходный массив NumPy, форму которого мы хотим изменить, – это значение первого аргумента ( np_array ).
Форма массива устанавливается во втором аргументе ( new_shape ). Его значение может быть целым числом или кортежем целых чисел.
Значение третьего аргумента определяет порядок заполнения массива и переноса элементов в преобразованном массиве. Возможных значений три: «C», «F» или «A». Давайте разберем, что значит каждый из этих вариантов.
order=’C’
Упорядочивание индексов в стиле языка C. Индекс последней оси изменяется быстрее, а индекс первой — медленнее.
order=’F’
Упорядочивания индексов в стиле языка Фортран. Индекс первой оси изменяется быстрее, а индекс последней — медленнее.
order=’A’
Варианты «C» и «F» не учитывают макет памяти основного массива. Они относятся лишь к порядку индексации. Порядок «A» означает чтение и запись элементов в стиле Фортран, если исходный массив в памяти тоже в стиле Фортран. В противном случае применяется C-подобный стиль.
Использование функции reshape()
Первым делом, прежде чем попрактиковаться в использовании данной функции, вам следует импортировать библиотеку NumPy. После этого можно приступать к работе.
Пример 1: преобразование одномерного массива в двумерный
Итак, давайте разберем, как с помощью функции reshape() преобразовать одномерный массив в двумерный.
Если вы запустите описанную выше программу, то получите результат, как на следующем скриншоте. Первый print() показывает исходный массив, а второй и третий выводят преобразованные массивы.
Пример 2: преобразование одномерного массива в трехмерный
Теперь давайте посмотрим, как при помощи функции reshape() преобразовать одномерный массив в трехмерный.
Воспользуемся функцией array() для создания одномерного массива из 12 элементов.
Выполнив данный код, вы получите следующий вывод. Как и в прошлый раз, первый print() показывает изначальный массив, второй – преобразованный массив.
Пример 3: изменение формы массива NumPy с учетом порядка
Как вы помните, у функции reshape() есть третий — опциональный — аргумент, задающий порядок индексации. Давайте посмотрим, как он применяется на практике.
Как и в первом примере, воспользуемся функцией arange() для создания одномерного массива из 15 элементов.
Первая функция reshape() используется для создания двумерного массива из 3 строк и 5 столбцов с упорядочением в стиле C. В то время как вторая функция reshape() используется для создания двумерного массива из 3 строк и 5 столбцов с упорядочением в стиле Фортрана.
Давайте выполним наш код. Вот, что мы получим. Как и раньше, первый print() показывает исходный массив значений. Второй print() показывает значения массива, упорядоченного по строкам. Третий – упорядоченного по столбцам.
Итоги
Итак, в этой статье мы подробно описали, как использовать функцию reshape() для преобразования массива из одной формы в другую. Цели и особенности использования данной функции становятся достаточно прозрачными после изучение примеров, которые мы привели выше.
Русские Блоги
И shape (), и reshape () являются методами в массиве
1. shape()
2. reshape()
Изменение формы основано на том факте, что элементы массива не могут быть изменены, а количество элементов, содержащихся в новой форме, должно соответствовать исходному количеству элементов. Если элемент массива изменится, будет сообщено об ошибке:
Новый массив, сгенерированный функцией reshape, использует ту же память, что и исходный массив, то есть независимо от того, изменяются ли элементы нового массива или исходного массива, другой массив также изменится соответственно:
Как метод numpy.reshape () переопределяет форму данных?
Сначала сгенерируйте случайный массив
Измените форму на 5 строк и 3 столбца, вы увидите, что оставшиеся два столбца данных в первой строке в (5, 3) используются как первые два столбца второй строки и т. Д.
Измените форму в столбец, где (-1, 1) также может быть любым столбцом, конечно, это может быть только 1, 3 и 5. Обратите внимание, что реализация заключается в циклическом цикле по строкам, от первого столбца до последнего столбца.
Наконец, изменив форму (-1,3), вы увидите, что реализация выполняется по порядку, сколько столбцов данных берется каждый раз, а затем упорядочивается по порядку.
Для многомерных массивов то же
получить,
Изменение формы массивов, добавление и удаление осей
На предыдущем занятии мы немного познакомились со способами изменения формы массивов пакета NumPy, то есть изменением их размерностей. На этом занятии поближе рассмотрим эту тему и познакомимся с наиболее употребительными функциями и свойствами, влияющих на представление массивов.
Изменение размерности массивов
Предположим, у нас имеется массив, состоящий из десяти чисел:
Мы уже знаем, что для изменения формы этого массива, достаточно указать свойству shape кортеж с новыми размерами, например, так:
В результате изменится представление массива, на которое ссылается переменная a. Если же требуется создать новое представление массива, сохранив прежнее, то следует воспользоваться методом reshape():
И, как мы с вами говорили на предыдущем занятии, ссылки b и a будут использовать одни и те же данные, то есть, изменение массива через b:
приведет к изменению соответствующего элемента массива a:
array([[-1, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9]])
Об этом всегда следует помнить. Также следует помнить, что у свойства shape и метода reshape() размерность должна охватывать все элементы массива. Например, вот такая команда:
приведет к ошибке, т.к. размерность 3×3 = 9 элементов, а в массиве 10 элементов. Здесь всегда должно выполняться равенство:
n1 x n2 x … x nN = число элементов массива
Но допускается делать так:
То же самое можно делать и в методе reshape():
Обратите внимание, в последних двух случаях мы получаем представления двумерных массивов, преобразуя одномерный. Это важный момент, так как на выходе метода reshape() получается матрица с двумя осями (строки и столбцы), тогда как изначально массив b имел только одну ось. Не случайно последнее представление отображается с двумя квадратными скобками:
array([[-1, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
Первая скобка – это первая ось (строка), а вторая скобка (вторая ось) описывает столбцы. Одномерный же массив b отображается с одной квадратной скобкой:
array([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Используя отрицательный индекс, можно делать и такие преобразования:
Первое представление (2×5) отображается следующим образом:
array([[-1, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9]])
Здесь снова мы видим две квадратные скобки (значит, массив двумерный). Первая описывает ось axis0, отвечающую за строки, а вложенные скобки описывают вторую ось axis1, отвечающую за столбцы.
Если нам требуется многомерный массив преобразовать в обычный одномерный, то можно воспользоваться методом ravel(), который возвращает новое представление, не меняя текущего:
Если же нам нужно текущий массив преобразовать в одномерный, то это можно сделать так:
Помимо свойства shape можно использовать метод resize, который выполняет подобную операцию с текущим массивом. Например:
Но, как мы уже говорили, вот такая строчка приведет к ошибке:
Однако, мы все-таки можем выполнить такую операцию, указав дополнительно флаг refcheck=False:
Транспонирование матриц и векторов
Очень часто в математических операциях требуется выполнять транспонирование матриц и векторов, то есть, заменять строки на столбцы. Например, если имеется матрица (двумерный массив):
то операция транспонирования может быть реализована так:
Обратите внимание, мы здесь создаем лишь новое представление тех же самых данных массива a. И изменение элементов в массиве b:
приведет к соответствующему изменению значения элемента и массива a. Это следует помнить, используя операцию транспонирования.
Транспонирование векторов работает несколько иначе. Предположим, имеется одномерный массив:
и мы выполняем операцию транспонирования:
В результате ничего не изменилось: вектор как был строкой, так строкой и остался. Почему? Дело в том, что массив x имеет только одну размерность, поэтому здесь нет понятия строк и столбцов. Соответственно, операция транспонирования ни к чему не приводит. Чтобы получить ожидаемый эффект, нужно добавить к массиву еще одну ось, например, так:
И теперь, при транспонировании получим вектор-столбец:
Добавление и удаление осей
Давайте предположим, что у нас имеется некий многомерный массив:
И нам потребовалось добавить еще одно измерение (ось), причем, в самое начало, то есть, ось axis0. Сейчас на этой оси 8 элементов – матриц 2×2, но мы хотим сделать четырехмерный массив, сохранив остальные три оси и их данные без изменений. Как раз это достаточно просто сделать с помощью функции expand_dims, следующим образом:
Обращаясь к свойству shape:
Видим, что массив стал четырехмерным и первая добавленная ось axis0 содержит один элемент – трехмерный массив 8x2x2. При необходимости, мы всегда можем добавить новый элемент на эту ось:
или удалить ненужные элементы:
Здесь второй параметр 0 – индекс удаляемого элемента на оси axis0.
Если нам нужно добавить последнюю ось в массиве, то для этого можно записать такую команду:
Следующая функция squeeze позволяет удалить все оси с одним элементом. Например, строчка:
превращает массив размерностью (1, 8, 2, 2) в массив размерностью (8, 2, 2). При необходимости, дополнительно мы можем самостоятельно указать оси, которые следует удалять, например, так:
Но, если указать ось с числом элементов больше 1, то возникнет ошибка:
Объект newaxis
В NumPy добавлять новые оси иногда удобнее с помощью специального объекта np.newaxis. Например, пусть у нас есть одномерный массив:
У него одна ось – одно измерение. Добавим еще одну ось, допустим, в начало. С помощью объекта np.newaxis это можно сделать так:
Или, можно прописать сразу две оси:
Как видите, это достаточно удобная операция.
Видео по теме
#2. Основные типы данных. Создание массивов функцией array() | NumPy уроки
#3. Функции автозаполнения, создания матриц и числовых диапазонов | NumPy уроки
#4. Свойства и представления массивов, создание их копий | NumPy уроки
#5. Изменение формы массивов, добавление и удаление осей | NumPy уроки
#6. Объединение и разделение массивов | NumPy уроки
#7. Индексация, срезы, итерирование массивов | NumPy уроки
#8. Базовые математические операции над массивами | NumPy уроки
#9. Булевы операции и функции, значения inf и nan | NumPy уроки
#10. Базовые математические функции | NumPy уроки
#11. Произведение матриц и векторов, элементы линейной алгебры | NumPy уроки
#12. Множества (unique) и операции над ними | NumPy уроки
#13. Транслирование массивов | NumPy уроки
© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта
numpy.reshape¶
Gives a new shape to an array without changing its data.
Parameters a array_like
Array to be reshaped.
newshape int or tuple of ints
order <‘C’, ‘F’, ‘A’>, optional
Read the elements of a using this index order, and place the elements into the reshaped array using this index order. ‘C’ means to read / write the elements using C-like index order, with the last axis index changing fastest, back to the first axis index changing slowest. ‘F’ means to read / write the elements using Fortran-like index order, with the first index changing fastest, and the last index changing slowest. Note that the ‘C’ and ‘F’ options take no account of the memory layout of the underlying array, and only refer to the order of indexing. ‘A’ means to read / write the elements in Fortran-like index order if a is Fortran contiguous in memory, C-like order otherwise.
Returns reshaped_array ndarray
This will be a new view object if possible; otherwise, it will be a copy. Note there is no guarantee of the memory layout (C- or Fortran- contiguous) of the returned array.
It is not always possible to change the shape of an array without copying the data. If you want an error to be raised when the data is copied, you should assign the new shape to the shape attribute of the array:
The order keyword gives the index ordering both for fetching the values from a, and then placing the values into the output array. For example, let’s say you have an array:
You can think of reshaping as first raveling the array (using the given index order), then inserting the elements from the raveled array into the new array using the same kind of index ordering as was used for the raveling.