Как 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) 
  • Сортировка массива python / повторение по столбцу
  • получение противоположной диагонали множества numpy
  • Перемещения между цифрами и линиями
  • Пользовательский трансформатор для sklearn Pipeline, который изменяет как X, так и y
  • Расстояние между массивами numpy, columnwise
  • Имя этого алгоритма, и есть ли его реализация numpy / scipy?
  • Детерминированный скрипт python ведет себя недетерминированным образом
  • Pyopencl: разница между to_device и Buffer
  • Как создать регулярные точки на цилиндрической поверхности
  • объединить два массива и сортировать
  • Массивы NumPy с SQLite
  • Python - лучший язык программирования в мире.