Algebraic Operations on a Matrix in R - GeeksforGeeks

10 May, 2020
Matrix is a rectangular arrangement of numbers in rows and columns. In a matrix, as we know rows are the ones that run horizontally and columns are the ones that run vertically. In R matrices are two-dimensional, homogeneous data structures. These are some examples of matrices.
Basic algebraic operations are any one of the traditional operations of arithmetic, which are addition, subtraction, multiplication, division, raising to an integer power, and taking roots. These operations may be performed on numbers, in which case they are often called arithmetic operations. We can perform many more algebraic operations on a matrix in R. Algebraic operations that can be performed on a matrix in R:
Operations on a single matrix
Unary operations
Binary operations
Linear algebraic operationsRank, determinant, transpose, inverse, trace of a matrixNullity of a matrixEigenvalues and eigenvectors of matricesSolve a linear matrix equation
Rank, determinant, transpose, inverse, trace of a matrix
Nullity of a matrix
Eigenvalues and eigenvectors of matrices
Solve a linear matrix equation
We can use overloaded arithmetic operators to do element-wise operation on a matrix to create a new matrix. In case of +=, -=, *= operators, the existing matrix is modified.
# R program to demonstrate# basic operations on a single matrix  # Create a 3x3 matrixa = matrix(  c(1, 2, 3, 4, 5, 6, 7, 8, 9),   nrow = 3,               ncol = 3,               byrow = TRUE          )cat("The 3x3 matrix:\n")print(a)  # add 1 to every elementcat("Adding 1 to every element:\n")print(a + 1)  # subtract 3 from each elementcat("Subtracting 3 from each element:\n")print(a-3)  # multiply each element by 10cat("Multiplying each element by 10:\n")print(a * 10)  # square each elementcat("Squaring each element:\n")print(a ^ 2)  # modify existing matrixcat("Doubled each element of original matrix:\n")print(a * 2)
Output:
The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9
Adding 1 to every element:
     [, 1] [, 2] [, 3]
[1, ]    2    3    4
[2, ]    5    6    7
[3, ]    8    9   10
Subtracting 3 from each element:
     [, 1] [, 2] [, 3]
[1, ]   -2   -1    0
[2, ]    1    2    3
[3, ]    4    5    6
Multiplying each element by 10:
     [, 1] [, 2] [, 3]
[1, ]   10   20   30
[2, ]   40   50   60
[3, ]   70   80   90
Squaring each element:
     [, 1] [, 2] [, 3]
[1, ]    1    4    9
[2, ]   16   25   36
[3, ]   49   64   81
Doubled each element of original matrix:
     [, 1] [, 2] [, 3]
[1, ]    2    4    6
[2, ]    8   10   12
[3, ]   14   16   18

Many unary operations can be performed on a matrix in R. This includes sum, min, max, etc.
# R program to demonstrate# unary operations on a matrix  # Create a 3x3 matrixa = matrix(  c(1, 2, 3, 4, 5, 6, 7, 8, 9),   nrow = 3,               ncol = 3,               byrow = TRUE          )cat("The 3x3 matrix:\n")print(a)  # maximum element in the matrixcat("Largest element is:\n")print(max(a))  # minimum element in the matrixcat("Smallest element is:\n")print(min(a))  # sum of element in the matrixcat("Sum of elements is:\n")print(sum(a))
Output:
The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9
Largest element is:
[1] 9
Smallest element is:
[1] 1
Sum of elements is:
[1] 45


These operations apply on a matrix elementwise and a new matrix is created. You can use all basic arithmetic operators like +, -, *, /, etc. In case of +=, -=, = operators, the existing matrix is modified.
# R program to demonstrate# binary operations on a matrix  # Create a 3x3 matrixa = matrix(  c(1, 2, 3, 4, 5, 6, 7, 8, 9),   nrow = 3,               ncol = 3,               byrow = TRUE          )cat("The 3x3 matrix:\n")print(a)  # Create another 3x3 matrixb = matrix(  c(1, 2, 5, 4, 6, 2, 9, 4, 3),   nrow = 3,               ncol = 3,               byrow = TRUE          )cat("The another 3x3 matrix:\n")print(b)  cat("Matrix addition:\n")print(a + b)  cat("Matrix substraction:\n")print(a-b)  cat("Matrix element wise multiplication:\n")print(a * b)  cat("Regular Matrix multiplication:\n")print(a %*% b)  cat("Matrix elementwise division:\n")print(a / b)
Output:
The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9
The another 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    5
[2, ]    4    6    2
[3, ]    9    4    3
Matrix addition:
     [, 1] [, 2] [, 3]
[1, ]    2    4    8
[2, ]    8   11    8
[3, ]   16   12   12
Matrix substraction:
     [, 1] [, 2] [, 3]
[1, ]    0    0   -2
[2, ]    0   -1    4
[3, ]   -2    4    6
Matrix element wise multiplication:
     [, 1] [, 2] [, 3]
[1, ]    1    4   15
[2, ]   16   30   12
[3, ]   63   32   27
Regular Matrix multiplication:
     [, 1] [, 2] [, 3]
[1, ]   36   26   18
[2, ]   78   62   48
[3, ]  120   98   78
Matrix elementwise division:
          [, 1]      [, 2] [, 3]
[1, ] 1.0000000 1.0000000  0.6
[2, ] 1.0000000 0.8333333  3.0
[3, ] 0.7777778 2.0000000  3.0

One can perform many linear algebraic operations on a given matrix In R. Some of them are as follows:
Rank, determinant, transpose, inverse, trace of a matrix:# R program to demonstrate# Linear algebraic operations on a matrix  # Importing required librarylibrary(pracma) # For rank of matrixlibrary(psych)  # For trace of matrix  # Create a 3x3 matrixA = matrix(  c(6, 1, 1, 4, -2, 5, 2, 8, 7),   nrow = 3,               ncol = 3,               byrow = TRUE          )cat("The 3x3 matrix:\n")print(A)  # Rank of a matrixcat("Rank of A:\n")print(Rank(A))  # Trace of matrix Acat("Trace of A:\n")print(tr(A))  # Determinant of a matrixcat("Determinant of A:\n")print(det(A))  # Transpose of a matrixcat("Transpose of A:\n")print(t(A))  # Inverse of matrix Acat("Inverse of A:\n")print(inv(A))Output:The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    6    1    1
[2, ]    4   -2    5
[3, ]    2    8    7
Rank of A:
[1] 3
Trace of A:
[1] 11
Determinant of A:
[1] -306
Transpose of A:
     [, 1] [, 2] [, 3]
[1, ]    6    4    2
[2, ]    1   -2    8
[3, ]    1    5    7
Inverse of A:
            [, 1]         [, 2]        [, 3]
[1, ]  0.17647059 -0.003267974 -0.02287582
[2, ]  0.05882353 -0.130718954  0.08496732
[3, ] -0.11764706  0.150326797  0.05228758

# R program to demonstrate# Linear algebraic operations on a matrix  # Importing required librarylibrary(pracma) # For rank of matrixlibrary(psych)  # For trace of matrix  # Create a 3x3 matrixA = matrix(  c(6, 1, 1, 4, -2, 5, 2, 8, 7),   nrow = 3,               ncol = 3,               byrow = TRUE          )cat("The 3x3 matrix:\n")print(A)  # Rank of a matrixcat("Rank of A:\n")print(Rank(A))  # Trace of matrix Acat("Trace of A:\n")print(tr(A))  # Determinant of a matrixcat("Determinant of A:\n")print(det(A))  # Transpose of a matrixcat("Transpose of A:\n")print(t(A))  # Inverse of matrix Acat("Inverse of A:\n")print(inv(A))
Output:
The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    6    1    1
[2, ]    4   -2    5
[3, ]    2    8    7
Rank of A:
[1] 3
Trace of A:
[1] 11
Determinant of A:
[1] -306
Transpose of A:
     [, 1] [, 2] [, 3]
[1, ]    6    4    2
[2, ]    1   -2    8
[3, ]    1    5    7
Inverse of A:
            [, 1]         [, 2]        [, 3]
[1, ]  0.17647059 -0.003267974 -0.02287582
[2, ]  0.05882353 -0.130718954  0.08496732
[3, ] -0.11764706  0.150326797  0.05228758

Nullity of a matrix:# R program to demonstrate# nullity of a matrix  # Importing required librarylibrary(pracma)  # Create a 3x3 matrixa = matrix(  c(1, 2, 3, 4, 5, 6, 7, 8, 9),   nrow = 3,               ncol = 3,               byrow = TRUE          )cat("The 3x3 matrix:\n")print(a)  # No of columncol = ncol(a)  # Rank of matrixrank = Rank(a)  # Calculating nullitynullity = col - rank  cat("Nullity of matrix is:\n")print(nullity)Output:The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9
Nullity of matrix is:
[1] 1

# R program to demonstrate# nullity of a matrix  # Importing required librarylibrary(pracma)  # Create a 3x3 matrixa = matrix(  c(1, 2, 3, 4, 5, 6, 7, 8, 9),   nrow = 3,               ncol = 3,               byrow = TRUE          )cat("The 3x3 matrix:\n")print(a)  # No of columncol = ncol(a)  # Rank of matrixrank = Rank(a)  # Calculating nullitynullity = col - rank  cat("Nullity of matrix is:\n")print(nullity)
Output:
The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9
Nullity of matrix is:
[1] 1

Eigenvalues and eigenvectors of matrices:# R program to illustrate# Eigenvalues and eigenvectors of metrics  # Create a 3x3 matrixA = matrix(  c(1, 2, 3, 4, 5, 6, 7, 8, 9),   nrow = 3,               ncol = 3,               byrow = TRUE          )cat("The 3x3 matrix:\n")print(A)  # Calculating Eigenvalues and eigenvectorsprint(eigen(A))Output:The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9
eigen() decomposition
$values
[1]  1.611684e+01 -1.116844e+00 -1.303678e-15

$vectors
           [, 1]        [, 2]       [, 3]
[1, ] -0.2319707 -0.78583024  0.4082483
[2, ] -0.5253221 -0.08675134 -0.8164966
[3, ] -0.8186735  0.61232756  0.4082483

# R program to illustrate# Eigenvalues and eigenvectors of metrics  # Create a 3x3 matrixA = matrix(  c(1, 2, 3, 4, 5, 6, 7, 8, 9),   nrow = 3,               ncol = 3,               byrow = TRUE          )cat("The 3x3 matrix:\n")print(A)  # Calculating Eigenvalues and eigenvectorsprint(eigen(A))
Output:
The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9
eigen() decomposition
$values
[1]  1.611684e+01 -1.116844e+00 -1.303678e-15

$vectors
           [, 1]        [, 2]       [, 3]
[1, ] -0.2319707 -0.78583024  0.4082483
[2, ] -0.5253221 -0.08675134 -0.8164966
[3, ] -0.8186735  0.61232756  0.4082483

Solve a linear matrix equation:# R program to illustrate# Solve a linear matrix equation of metrics  # Importing library for applying pseudoinverselibrary(MASS)  # Create a 2x2 matrixA = matrix(  c(1, 2, 3, 4),   nrow = 2,               ncol = 2,             )cat("A = :\n")print(A)  # Create another 2x1 matrixb = matrix(  c(7, 10),   nrow = 2,               ncol = 1,             )cat("b = :\n")print(b)  cat("Solution of linear equations:\n")print(solve(A)%*% b)  cat("Solution of linear equations using pseudoinverse:\n")print(ginv(A)%*% b)Output:A = :
     [, 1] [, 2]
[1, ]    1    3
[2, ]    2    4
b = :
     [, 1]
[1, ]    7
[2, ]   10
Solution of linear equations:
     [, 1]
[1, ]    1
[2, ]    2
Solution of linear equations using pseudoinverse:
     [, 1]
[1, ]    1
[2, ]    2

# R program to illustrate# Solve a linear matrix equation of metrics  # Importing library for applying pseudoinverselibrary(MASS)  # Create a 2x2 matrixA = matrix(  c(1, 2, 3, 4),   nrow = 2,               ncol = 2,             )cat("A = :\n")print(A)  # Create another 2x1 matrixb = matrix(  c(7, 10),   nrow = 2,               ncol = 1,             )cat("b = :\n")print(b)  cat("Solution of linear equations:\n")print(solve(A)%*% b)  cat("Solution of linear equations using pseudoinverse:\n")print(ginv(A)%*% b)
Output:
A = :
     [, 1] [, 2]
[1, ]    1    3
[2, ]    2    4
b = :
     [, 1]
[1, ]    7
[2, ]   10
Solution of linear equations:
     [, 1]
[1, ]    1
[2, ]    2
Solution of linear equations using pseudoinverse:
     [, 1]
[1, ]    1
[2, ]    2

Programming Language
R Language
Write From Home
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
R - Matrices
R - Charts and Graphs
7 Highest Paying Programming Languages For Freelancers in 2022
R - Data Types
Introduction of Object Oriented Programming
Change column name of a given DataFrame in R
How to Replace specific values in column in R DataFrame ?
Filter data by multiple conditions in R using Dplyr
Adding elements in a vector in R programming - append() method
Loops in R (for, while, repeat)