0Pricing
R Academy · Урок

Арифметика и операции над матрицами

Выполняйте поэлементное и матричное умножение, сложение и вычитание.

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

Поэлементные и матричные операции

R различает поэлементные операции (с использованием +, -, *, /) и настоящие матричные операции (с использованием %*%). Понимание этой разницы необходимо для правильного выполнения операций линейной алгебры.

A <- matrix(c(1,2,3,4), nrow = 2)
B <- matrix(c(5,6,7,8), nrow = 2)
cat('A:
'); print(A)
cat('B:
'); print(B)

# Element-wise multiply
cat('A * B (element-wise):
'); print(A * B)
# Matrix multiply
cat('A %*% B (matrix mult):
'); print(A %*% B)

Поэлементное сложение и вычитание

Операторы + и - для двух матриц с одинаковыми размерностями складывают или вычитают соответствующие элементы. Это чисто поэлементные операции.

# Monthly revenue vs target (in thousands)
revenue <- matrix(c(120,135,110,98, 145,160,132,115),
                  nrow = 2, byrow = TRUE)
target  <- matrix(c(130,130,130,130, 150,150,150,150),
                  nrow = 2, byrow = TRUE)

deviation <- revenue - target
cat('Revenue vs Target deviation:
')
print(deviation)
cat('Above target?:
')
print(revenue >= target)

Поэлементное деление и умножение

Аналогично, * и / для матриц одинакового размера выполняются поэлементно. Это удобно для масштабирования, нормализации или поэлементного объединения матриц.

# Scale a matrix by another (element-wise)
prices <- matrix(c(10, 20, 15, 25), nrow = 2)
quantities <- matrix(c(5, 3, 8, 2), nrow = 2)

total_cost <- prices * quantities
cat('Total cost per item:
')
print(total_cost)

# Normalise to row maximum
max_prices <- matrix(rep(apply(prices, 1, max), 2), nrow = 2)
norm_prices <- prices / max_prices
cat('Normalised prices:
')
print(norm_prices)

Скалярные операции над матрицами

Вы можете применить операцию со скаляром (одним числом) к каждому элементу матрицы с помощью стандартных арифметических операторов. Скляр повторяется до соответствия размерностям матрицы.

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

cat('m + 5:
');  print(m + 5)
cat('m * 2:
');  print(m * 2)
cat('m / 10:
'); print(m / 10)
cat('m ^ 2:
');  print(m ^ 2)

Настоящее матричное умножение %*%

A %*% B выполняет матричное умножение в линейной алгебре. Для этого число столбцов A должно быть равно числу строк B. Результат имеет размерность (число строк A) x (число столбцов B).

# 2x3 times 3x2 = 2x2
A <- matrix(c(1,2,3, 4,5,6), nrow = 2, byrow = TRUE)
B <- matrix(c(7,8, 9,10, 11,12), nrow = 3, byrow = TRUE)
cat('A (2x3):
'); print(A)
cat('B (3x2):
'); print(B)
cat('A %*% B (2x2):
'); print(A %*% B)

rowSums() и colSums()

rowSums(m) вычисляет сумму каждой строки; colSums(m) вычисляет сумму каждого столбца. Обе функции возвращают именованные векторы, если у матрицы есть имена измерений.

sales <- matrix(
  c(120,135,110,98,  145,160,132,115,  88,95,102,78),
  nrow = 3, byrow = TRUE,
  dimnames = list(c('Q1','Q2','Q3'), c('Jan','Feb','Mar','Apr'))
)
cat('Sales matrix:
'); print(sales)
cat('Quarterly totals:', rowSums(sales), '
')
cat('Monthly totals: ', colSums(sales), '
')

rowMeans() и colMeans()

rowMeans(m) и colMeans(m) возвращают среднее значение каждой строки и каждого столбца соответственно. Для этой распространённой задачи они работают быстрее, чем применение mean() с помощью apply().

exam_scores <- matrix(
  c(88,92,75,81, 79,85,90,73, 95,78,82,88),
  nrow = 3, byrow = TRUE,
  dimnames = list(c('Alice','Bob','Carol'), c('Math','Sci','Eng','Hist'))
)
cat('Student averages:
')
print(rowMeans(exam_scores))
cat('Subject averages:
')
print(colMeans(exam_scores))

Операции сравнения над матрицами

Операторы сравнения (==, >, <= и т. д.), применённые к матрицам, возвращают логическую матрицу тех же размерностей. Затем эту маску можно использовать для выбора элементов или подсчёта.

scores <- matrix(c(88,45,92,61,73,55,84,79), nrow = 2)
cat('Scores:
'); print(scores)

# Which elements pass?
passing_mask <- scores >= 60
cat('Passing mask:
'); print(passing_mask)
cat('Number passing:', sum(passing_mask), '
')
cat('Passing scores:', scores[passing_mask], '
')

apply() для пользовательских операций над строками и столбцами

apply(m, MARGIN, FUN) применяет функцию к строкам (MARGIN=1) или столбцам (MARGIN=2). Используйте её, когда нужна пользовательская агрегация, выходящая за рамки rowSums/colMeans.

m <- matrix(c(3,1,4,1,5,9,2,6,5,3,5,8), nrow = 3)
cat('Matrix:
'); print(m)

# Max of each row
cat('Row max:  ', apply(m, 1, max), '
')
# Range of each column
cat('Col range:
')
print(apply(m, 2, range))
# Custom: count values > 4 per row
cat('Values > 4 per row:', apply(m, 1, function(x) sum(x > 4)), '
')

Распространение вектора по строкам

Когда вы складываете вектор с матрицей или умножаете на него матрицу, R повторяет вектор, циклически перебирая его элементы до соответствия длине матрицы. Повторение выполняется по столбцам, что может привести к неожиданным результатам, если вам нужны операции по строкам.

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

# Add a 3-element vector: R recycles column-by-column
v <- c(1, 2, 3)
cat('m + c(1,2,3):
'); print(m + v)

# For row-wise scaling, use sweep()
row_weights <- c(0.5, 2.0)  # scale row 1 by 0.5, row 2 by 2
cat('Row-wise scaled:
'); print(sweep(m, 1, row_weights, '*'))

Итоги арифметических операций

Основные функции для операций над матрицами в R:

  • +, -, *, / — поэлементная арифметика
  • %*% — матричное умножение (линейная алгебра)
  • rowSums(), colSums() — суммы по строкам и столбцам
  • rowMeans(), colMeans() — средние значения по строкам и столбцам
  • apply(m, 1, fn) / apply(m, 2, fn) — пользовательская агрегация по строкам и столбцам
  • sweep() — операции по строкам и столбцам с вектором
m <- matrix(c(4,9,16,25), nrow = 2)
cat('Original:
'); print(m)
cat('sqrt (element-wise):
'); print(sqrt(m))
cat('rowSums:', rowSums(m), '
')
cat('colMeans:', colMeans(m), '
')

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

Что вычисляет A * B, если A и B — матрицы размера 2x2 в R?

Итоги: арифметика матриц

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

  • +, -, *, / для матриц являются поэлементными
  • %*% — это настоящее матричное умножение (строки × столбцы)
  • rowSums(), colSums(), rowMeans(), colMeans() выполняют агрегацию по строкам и столбцам
  • Операторы сравнения возвращают логическую матрицу той же формы
  • apply(m, 1, fn) применяет функцию по строкам; apply(m, 2, fn) — по столбцам
  • Используйте sweep() для векторизованного масштабирования по строкам и столбцам
# Final: compute grade curve (add 5 to all scores, cap at 100)
raw <- matrix(c(88,55,92,73,60,45,78,95), nrow = 2)
curved <- pmin(raw + 5, 100)  # pmin applies min element-wise
cat('Raw:
');    print(raw)
cat('Curved:
'); print(curved)

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

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

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

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

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

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

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

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

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

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

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

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

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