Как numpy.ndarray.transpose () переставляет ось массива nd?

In [28]: arr = np.arange(16).reshape((2, 2, 4)) In [29]: arr Out[29]: array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7]], [[ 8, 9, 10, 11], [12, 13, 14, 15]]]) In [32]: arr.transpose((1, 0, 2)) Out[32]: array([[[ 0, 1, 2, 3], [ 8, 9, 10, 11]], [[ 4, 5, 6, 7], [12, 13, 14, 15]]]) 

Когда мы передаем кортеж целых чисел функции transpose() , что происходит?

Чтобы быть конкретным, это трехмерный массив: как NumPy преобразует массив при передаче кортежа осей (1, 0 ,2) ? Можете ли вы объяснить, к какой строке или столбцу относятся эти целые числа? А что такое номера осей в контексте NumPy?

2 Solutions collect form web for “Как numpy.ndarray.transpose () переставляет ось массива nd?”

Короче: перенос массива означает, что NumPy просто нужно переставить информацию о шаге и форме для каждой оси:

 >>> arr.strides (64, 32, 8) >>> arr.transpose(1, 0, 2).strides (32, 64, 8) 

Обратите внимание, что шаги для первой и второй осей были заменены здесь. Это означает, что данные не должны копироваться; NumPy может просто изменить, как он смотрит на память, чтобы построить массив.


Какие успехи?

Значения в трехмерном массиве arr хранятся в непрерывном блоке памяти следующим образом:

 [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 

В случае arr каждое целое число занимает 8 байт памяти (т.е. мы используем тип int64).

Шаг указывает NumPy, сколько байтов пропустить, чтобы перейти к следующему значению вдоль оси. Например, чтобы получить следующее значение в строке в arr (ось 2), нам просто нужно переместить 8 байтов (1 номер).

arr.transpose(1, 0, 2) для arr.transpose(1, 0, 2) являются (32, 64, 8). Для перемещения по первой оси вместо 64 байтов (8 чисел) NumPy теперь будет пропускать только 32 байта (4 числа) каждый раз:

 [[[0 ...] [... ...]] [[4 ...] [... ...]]] 

Аналогично, NumPy теперь пропускает 64 байта (8 чисел) для перемещения по оси 1:

 [[[0 ...] [8 ...]] [[4 ...] [12 ...]]] 

Фактический код, который выполняет транспонирование, написан на C и может быть найден здесь .

Как поясняется в документации :

По умолчанию измените размеры, иначе переместите оси в соответствии с указанными значениями.

Таким образом, вы можете передать необязательные axes параметров, определяющие новый порядок измерений.

Например, перенос первых двух измерений матрицы пикселов VGA VGA:

  >>> x = np.ones((480, 640, 3)) >>> np.transpose(x, (1, 0, 2)).shape (640, 480, 3) 
Interesting Posts

Python BeautifulSoup не соскабливает этот URL-адрес

изменение элемента в списке списков

Где разместить файл конфигурации в Python?

Действие django для ввода / сканирования текста

Как найти «конкретный класс» базового класса модели django

Разница между «+ =» и «= +»?

Запрос Sqlalchemy возвращает неверные и устаревшие результаты (для движка sqlite)

Как перемещать файлы, перечисленные в текстовом файле из одной папки в другую в python

Невозможно ли настроить Django admin?

ValueError: установка элемента массива с последовательностью с использованием numpy

Подпроцесс Python: проведите кадр изображения в команду imagemagick shell

PySpark: добавьте новый столбец с кортежем, созданным из столбцов

Python tkinter: обновить графический интерфейс между вызовами подпроцесса

Тензорный поток: как изменить значение в тензоре

Python socket.send () может отправлять только один раз, затем socket.error: Произошла неисправная труба

Python - лучший язык программирования в мире.