0Pricing
R Academy · Урок

Транспонирование и изменение формы матриц

Используйте t(), dim() и операции изменения формы для матриц.

«Транспонирование и изменение формы матриц» — бесплатный урок R Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения R Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс R Academy содержит 4 уроков всего.

Транспонирование матрицы с помощью t()

t(m) транспонирует матрицу — меняет местами строки и столбцы, так что строка i становится столбцом i в результате. Размерности меняются местами: после транспонирования матрица 3x4 становится матрицей 4x3.

m <- matrix(1:6, nrow = 2, ncol = 3)
cat('Original (2x3):
'); print(m)
cat('Transposed (3x2):
'); print(t(m))
cat('Original dim:', dim(m), '-> Transposed dim:', dim(t(m)), '
')

Транспонирование с именованными измерениями

Если у матрицы есть имена строк и столбцов, t() корректно меняет имена местами: имена строк становятся именами столбцов и наоборот. Благодаря этому после транспонирования данные сохраняют свои обозначения.

scores <- matrix(
  c(88,92,75, 79,85,90),
  nrow = 2, byrow = TRUE,
  dimnames = list(c('Alice', 'Bob'), c('Math', 'Sci', 'Eng'))
)
cat('Original (students x subjects):
'); print(scores)
cat('Transposed (subjects x students):
'); print(t(scores))

Изменение формы с помощью dim(m) <- c(r, c)

Вы можете изменить форму матрицы, заново присвоив её атрибуту dim новое значение. Общее число элементов должно остаться прежним. При изменении формы чтение и заполнение выполняются по столбцам, как и в matrix().

m <- matrix(1:12, nrow = 3, ncol = 4)
cat('Original (3x4):
'); print(m)

# Reshape to 4x3
dim(m) <- c(4, 3)
cat('Reshaped to (4x3):
'); print(m)

# Reshape to 6x2
dim(m) <- c(6, 2)
cat('Reshaped to (6x2):
'); print(m)

Преобразование матрицы в вектор с помощью as.vector()

as.vector(m) превращает матрицу в одномерный вектор, считывая значения по столбцам. Это удаляет у объекта все атрибуты размерности.

m <- matrix(c(10,20,30,40,50,60), nrow = 2, ncol = 3)
cat('Matrix:
'); print(m)

v <- as.vector(m)
cat('As vector (col-by-col):', v, '
')
cat('Is vector:', is.vector(v), '
')
cat('Is matrix:', is.matrix(v), '
')

Преобразование вектора в матрицу с помощью as.matrix()

as.matrix(v) преобразует вектор в матрицу с одним столбцом. Это самый простой вариант преобразования. Затем можно изменить её форму с помощью dim(), задав нужные размерности.

v <- c(5, 10, 15, 20, 25, 30)
cat('Vector:', v, '
')

# as.matrix makes a 6x1 matrix
m_single_col <- as.matrix(v)
cat('Single-column matrix:
'); print(m_single_col)
cat('Dimensions:', dim(m_single_col), '
')

rbind() — объединение строк

rbind() объединяет матрицы или векторы, складывая строки. Все входные данные должны иметь одинаковое число столбцов. В результирующей матрице число строк равно сумме числа строк входных данных.

first_half <- matrix(1:6, nrow = 2, ncol = 3)
second_half <- matrix(7:12, nrow = 2, ncol = 3)

combined <- rbind(first_half, second_half)
cat('rbind result (4x3):
'); print(combined)
cat('Dimensions:', dim(combined), '
')

cbind() — объединение столбцов

cbind() объединяет матрицы или векторы, соединяя столбцы рядом. Все входные данные должны иметь одинаковое число строк. В результате получается общее число столбцов.

ids <- matrix(101:104, nrow = 4, ncol = 1)
scores_mat <- matrix(c(88,79,95,72, 92,85,78,90), nrow = 4)

full_data <- cbind(ids, scores_mat)
colnames(full_data) <- c('ID', 'Test1', 'Test2')
cat('cbind result:
'); print(full_data)

rbind() и cbind() с именованными строками и столбцами

Когда вы применяете rbind() или cbind() к именованным матрицам или векторам, имена измерений сохраняются (а для векторов их имена становятся именами строк или столбцов).

# Add a new student row with rbind
existing <- matrix(c(88,92,75, 79,85,90), nrow = 2, byrow = TRUE,
                   dimnames = list(c('Alice','Bob'), c('Math','Sci','Eng')))
new_student <- c(Math=95, Sci=78, Eng=82)
updated <- rbind(existing, Carol = new_student)
cat('Updated roster:
'); print(updated)

Тождество двойного транспонирования

Двойное применение t() возвращает исходную матрицу. Это удобная проверка корректности и демонстрация того, что транспонирование является обратной операцией для самой себя: t(t(m)) == m.

m <- matrix(c(1,2,3,4,5,6), nrow = 2)
cat('Original:
'); print(m)
cat('t(m):
');    print(t(m))
cat('t(t(m)):
'); print(t(t(m)))
cat('t(t(m)) == m:', all(t(t(m)) == m), '
')

Практика: изменение формы в стиле сводной таблицы

Распространённая задача изменения формы — преобразование между широким и длинным форматами. Здесь мы вручную имитируем преобразование из широкого формата в длинный с помощью операций над матрицами: транспонирования, преобразования в одномерный вид и восстановления структуры.

# Wide: 3 students x 4 months scores
wide <- matrix(c(85,88,90,92, 78,80,79,83, 91,94,88,95),
               nrow = 3, byrow = TRUE)
rownames(wide) <- c('Alice', 'Bob', 'Carol')
colnames(wide) <- c('Jan', 'Feb', 'Mar', 'Apr')
cat('Wide format:
'); print(wide)

# Transposed: 4 months x 3 students
long_view <- t(wide)
cat('Transposed (months x students):
'); print(long_view)

Итоги изменения формы и объединения

Основные инструменты для изменения формы и объединения матриц:

  • t(m) — транспонирование (обмен строк и столбцов)
  • dim(m) <- c(r, c) — изменение формы на месте (общее число элементов не меняется)
  • as.vector(m) — преобразование в одномерный вектор (в порядке столбцов)
  • as.matrix(v) — преобразование вектора в матрицу с одним столбцом
  • rbind(...) — вертикальное объединение матриц
  • cbind(...) — горизонтальное объединение матриц
# Demo all tools
v <- 1:6
m1 <- as.matrix(v)               # 6x1
dim(m1) <- c(2, 3)               # reshape to 2x3
m2 <- t(m1)                      # 3x2
m3 <- cbind(m2, c(10, 20, 30))   # 3x3
cat('Final matrix:
'); print(m3)

Быстрая проверка

Какие размерности имеет результат t(matrix(1:12, nrow = 3, ncol = 4))?

Итоги: транспонирование и изменение формы

Отлично! Основные выводы этого урока:

  • t(m) меняет местами строки и столбцы; t(t(m)) возвращает исходную матрицу
  • dim(m) <- c(r, c) изменяет форму без копирования (необходимо сохранить то же число элементов)
  • as.vector() преобразует матрицу в одномерный вид по столбцам; as.matrix() создаёт матрицу с одним столбцом
  • rbind() объединяет строки (необходимо одинаковое число столбцов)
  • cbind() соединяет столбцы рядом (необходимо одинаковое число строк)
  • Именованные измерения сохраняются при выполнении этих операций
# Practical: merge data then compute column means
team_a <- matrix(c(82,78,91, 85,80,88), nrow = 2, byrow=TRUE)
team_b <- matrix(c(75,92,79, 88,84,93), nrow = 2, byrow=TRUE)
all_teams <- rbind(team_a, team_b)
colnames(all_teams) <- c('Speed', 'Accuracy', 'Strength')
cat('Combined teams:
'); print(all_teams)
cat('Average per skill:', colMeans(all_teams), '
')

Часто задаваемые вопросы

Урок «Транспонирование и изменение формы матриц» бесплатный?

Да — полный текст урока «Транспонирование и изменение формы матриц» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс R Academy, подпишись на CoddyKit PRO. Курс R Academy содержит 4 уроков всего.

Чему я научусь в уроке «Транспонирование и изменение формы матриц»?

Используйте t(), dim() и операции изменения формы для матриц. Ты практикуешь R Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать R Academy?

Предыдущий опыт не требуется. R Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Транспонирование и изменение формы матриц»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке R Academy?

Да. Каждый урок R Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Создание матриц с помощью matrix()
  2. Индексация и выборка элементов матриц
  3. Арифметика и операции над матрицами
  4. Транспонирование и изменение формы матриц
← Назад к R Academy