Изменение формы массива NumPy
Изменение формы массивов
Изменение формы означает изменение формы массива.
Форма массива — это количество элементов в каждом измерении.
Изменяя форму, мы можем добавлять или удалять измерения или изменять количество элементов в каждом измерении.
Изменить форму с 1-D на 2-D
Пример
Преобразуйте следующий одномерный массив с 12 элементами в двумерный массив.
Самое внешнее измерение будет иметь 4 массива, каждый из которых состоит из 3 элементов:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12])
newarr = arr.reshape(4, 3)
print(newarr)
Изменить форму с 1-D на 3-D
Пример
Преобразуйте следующий одномерный массив с 12 элементами в трехмерный массив.
Самое внешнее измерение будет иметь 2 массива, которые содержат 3 массива, каждый из которых содержит 2 элемента:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12])
newarr = arr.reshape(2, 3, 2)
print(newarr)
Можем ли мы измениться в любую форму?
Да, если элементы, необходимые для изменения формы, одинаковы в обеих формах.
Мы можем преобразовать 8-элементный одномерный массив в 4 элемента в 2-строчном 2D-массиве, но мы не можем преобразовать его в 3-элементный 3-строчный 2D-массив, поскольку для этого потребуется 3x3 = 9 элементов.
Пример
Попробуйте преобразовать 1D-массив с 8 элементами в 2D-массив с 3 элементами в каждом измерении (вызовет ошибку):
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(3, 3)
print(newarr)
Возвращает копирование или просмотр?
Пример
Проверьте, является ли возвращаемый массив копией или представлением:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print(arr.reshape(2, 4).base)
Приведенный выше пример возвращает исходный массив, поэтому это представление.
Неизвестное измерение
Вам разрешено иметь одно «неизвестное» измерение.
Это означает, что вам не нужно указывать точное число для одного из измерений в методе изменения формы.
Передайте -1
в качестве значения, и NumPy рассчитает это число для вас.
Пример
Преобразование массива 1D с 8 элементами в массив 3D с элементами 2x2:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(2, 2, -1)
print(newarr)
Примечание: мы не можем перейти -1
к более чем одному измерению.
Сведение массивов
Сведение массива означает преобразование многомерного массива в одномерный массив.
Мы можем использовать reshape(-1)
для этого.
Пример
Преобразуйте массив в одномерный массив:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
newarr
= arr.reshape(-1)
print(newarr)
Примечание. Существует множество функций для изменения формы массивов в numpy flatten
, ravel
а также для перестановки элементов rot90
, flip
, fliplr
и flipud
т. д. Они относятся к разделу numpy от среднего до продвинутого.