Что означает -1 в Numpy Reshape?
NumPy — это библиотека Python для числовых вычислений, которая обеспечивает эффективные операции с массивами, а numpy.reshape() — это функция, используемая для изменения формы массива, где -1 указывает предполагаемое измерение.
При работе с массивами мы часто сталкиваемся со случаями, когда нам нужно изменить форму массива, но для этого необходимо сначала скопировать данные, а затем придать им необходимую форму, что занимает много времени. К счастью, в Python есть функция reshape(), которая может в этом помочь.
Пример 1: найти неизвестные измерения в Numpy
Нам разрешено иметь только одно «неизвестное» измерение, в то время как нам неизвестно какое-либо измерение массива.
Это означает, что при использовании метода изменения формы нам не нужно указывать число для одного из этих измерений. Мы используем NumPy для вычисления неизвестного измерения, передавая ему значение -1.
Значения параметров (2, 2, -1) указывают, что желаемая форма выходного массива — 2 строки и 2 столбца, а оставшееся измерение определяется автоматически на основе размера входного массива.
Следующая программа показывает использование -1 в функции reshape() массивов numpy.
# importing numpy module
import numpy as np
# creating a numpy array
inputArray = np.array([15, 16, 17, 18, 19, 20, 21, 22])
# reshaping the input array into a 3-dimensional array with 2 rows, 2 columns, and an automatically inferred depth
outputArray = inputArray.reshape(2, 2, -1)
# printing the resultant array
print(outputArray)
Выход
[[[15 16]
[17 18]]
[[19 20]
[21 22]]]
Пример 2. Использование -1 в качестве значения неизвестного количества столбцов
Следующая программа показывает использование -1 для значения неизвестного столбца.
# importing numpy module
import numpy as np
# creating a numpy array
inputArray = np.array([15, 16, 17, 18, 19, 20, 21, 22])
# reshaping the input array into a 3-dimensional array with 2 rows, an automatically inferred middle dimension, and 4 columns
outputArray = inputArray.reshape(2, -1, 4)
# printing the resultant array
print(outputArray)
Выход
[[[15 16 17 18]]
[[19 20 21 22]]]
Пример 3. Использование -1 в качестве неизвестного значения количества строк
В приведенном ниже примере форма указана как (-1, 4, 2), что указывает на то, что первое измерение автоматически выводится на основе размера входного массива. Выходные данные представляют собой трехмерный массив желаемой формы. Затем функция reshape() используется для преобразования входного массива в трехмерный массив. Он имеет 2 строки, автоматически определяемое среднее измерение (с использованием -1) и 4 столбца. Параметр -1 позволяет numpy автоматически вычислять размер выведенного измерения на основе размера входного массива и заданных размеров.
# importing numpy module
import numpy as np
# creating a numpy array
inputArray = np.array([15, 16, 17, 18, 19, 20, 21, 22])
# reshaping the input array into a 3-dimensional array with an automatically inferred first dimension, 4 columns, and 2 depth elements
outputArray = inputArray.reshape(-1, 4, 2)
# printing the resultant array
print(outputArray)
Выход
При выполнении вышеуказанная программа сгенерирует следующий вывод
[[[15 16]
[17 18]
[19 20]
[21 22]]]
Пример 4: Использование -1 для более чем одного неизвестного измерения
В примере мы использовали -1 для более чем одного неизвестного измерения. Следовательно, это вызвало ошибку.
# importing numpy module
import numpy as np
# creating a numpy array
inputArray = np.array([15, 16, 17, 18, 19, 20, 21, 22])
# reshaping the input array into a 3-dimensional array with 2 as the first dimension and an automatically inferred second and third dimension
outputArray = inputArray.reshape(2, -1, -1)
# printing the resultant array
print(outputArray)
Выход
Traceback (most recent call last):
File "/home/cg/root/85901/main.py", line 8, in <module>
outputArray = inputArray.reshape(2, -1, -1)
ValueError: can only specify one unknown dimension
Сглаживание массивов Numpy с помощью функции reshape()
Сведение 3D-массива в 1D-массив с помощью функции reshape()
Следующая программа возвращает сглаженный одномерный массив путем преобразования входного 3D-массива в 1D-массив с помощью функции reshape().
# importing numpy module
import numpy as np
# creating a 3D array
inputArray = np.array([[1, 3, 5],
[7, 9, 11],
[13, 15, 17]])
# flattening 3D input array to 1-dimension using reshape() function
outputArray = inputArray.reshape(-1)
# printing the resultanat flattened array
print("Output flattened array:\n", outputArray)
Выход
Output flattened array:
[ 1 3 5 7 9 11 13 15 17]
Сведение 2D-массива в 1D-массив с помощью функции reshape()
Следующая программа возвращает сглаженный одномерный массив путем преобразования входного 2D-массива в 1D-массив с помощью функции reshape().
# importing numpy module
import numpy as np
# creating a 2D array
inputArray = np.array([[15, 16, 17], [18, 19, 20]])
# flattening 2D input array to 1-dimension using reshape() function
outputArray = inputArray.reshape(-1)
# printing the resultant flattened array
print("Output flattened array:\n", outputArray)
Выход
Output flattened array:
[15 16 17 18 19 20]
Заключение
В заключение, значение -1 в функции reshape() NumPy используется для представления неизвестного измерения. Это позволяет NumPy автоматически вычислять размер этого измерения на основе других измерений и размера входного массива. Эта функция особенно полезна при изменении формы массивов с известными размерами или при сведении многомерных массивов к одному измерению. Используя -1, мы можем упростить процесс изменения формы и избежать необходимости ручных вычислений.