Как транспонировать 1D массив в Python с использованием NumPy

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для преобразования одномерного массива в двумерный столбцовый массив можно воспользоваться функцией np.reshape с аргументом -1:

Python
Скопировать код
array_2d = array_1d.reshape(-1, 1)

Здесь -1 говорит NumPy о том, что необходмо подобрать необходимое количество строк, чтобы сформировать столбцовый вектор.

Кинга Идем в IT: пошаговый план для смены профессии

Особенности транспонирования и размерности

Транспонирование одномерного массива в NumPy часто вызывает вопросы. Применение .T к нему не меняет его форму – результатом остаётся тот же одномерный массив. Всё дело в том, что транспонирование применимо только для массивов, размерность которых равна двум или более.

Добавление новой размерности с помощью np.newaxis

В этом случае на помощь приходит np.newaxis – инструмент для добавления новой оси в массив. Можно сравнить это с добавлением новой грани к объекту:

Преобразование массива в столбцовый вектор можно осуществить так:

Python
Скопировать код
column_vector = array_1d[:, np.newaxis]

Преобразование массива в строковый вектор выглядит следующим образом:

Python
Скопировать код
row_vector = array_1d[np.newaxis, :]

Трансляция или Broadcasting: работа с невидимостью

Broadcasting, или трансляция, это возможность NumPy обрабатывать массивы разной формы путём их "виртуального" расширения до совместимых размеров. Это мощный механизм, но при его использовании необходимо быть внимательным к размерам обрабатываемых массивов.

np.matrix: устаревающий метод

Ещё одним способом транспонирования одномерного массива является np.matrix. Однако его использование не рекомендуется, поскольку этот тип устарел и его функциональность ограничена по сравнению с np.array:

Python
Скопировать код
matrix = np.matrix(array_1d)
transposed_matrix = matrix.T

Визуализация

Представим одномерный массив как ряд танцующих фигурок:

Markdown
Скопировать код
До транспонирования:  ☺️-💃-🏽-🚶-🏽-💃-🏽- (Идут в линии)

Теперь они становятся в столбик:

Markdown
Скопировать код
После транспонирования: 
☺️
|
💃
|
🏽
|
🚶
|
🏽
|
💃
|
🏽
(Образовался вертикальный ряд!)

Для того чтобы превратить "горизонтальный ряд" в "вертикальный", используем:

Python
Скопировать код
import numpy as np
conga_line = np.array([1, 2, 3])
vertical_line = conga_line.reshape(-1, 1)

Расширение инструментария

Помимо .reshape и np.newaxis, существуют и другие методы для работы с одномерными массивами.

Гарантированное преобразование в 2D с помощью np.atleast_2d

np.atleast_2d() гарантирует, что вы получите результат в виде двумерного массива:

Python
Скопировать код
two_d_array = np.atleast_2d(array_1d)

Это не транспонирование, но метод переводит массив в двумерное пространство.

Мифы о np.transpose

Применение np.transpose() не приводит к изменению формы одномерного массива – результат будет таким же, как при использовании метода .T.

Проверка на вменяемость с использованием .shape

Всегда можно дополнительно проверить размерность массива с помощью атрибута shape:

Python
Скопировать код
print(array_1d.shape)         # (n,)
print(transposed_array.shape) # (n, 1)

Подход старой школы: Использование двойных скобок [[]]

Можно также преобразовать одномерный массив в двумерный вручную:

Python
Скопировать код
two_d_array = np.array([[x] for x in array_1d])

Результат будет аналогичен использованию .reshape(-1, 1) или np.newaxis.

Полезные материалы

  1. numpy.reshape — Руководство NumPy v1.26 — документация по методу изменения формы массивов.
  2. Stack Overflow — Транспонирование одномерного массива NumPy — обсуждение проблемы транспонирования на Stack Overflow.
  3. Быстрый старт с NumPy — руководство для начинающих, показывающее, как работать с массивами NumPy.
  4. numpy.transpose — Руководство NumPy v1.26 — детальная информация о функции transpose.
  5. Broadcasting — Руководство NumPy v1.26 — основы работы и с примерами использования broadcasting в NumPy.
  6. Лекционные материалы Scipy — информация о манипуляциях с формами массивов в NumPy.