# Matrix Cross Product in R (2 Examples) | crossprod & tcrossprod Functions

In this R tutorial you’ll learn how to **calculate matrix cross products using the crossprod and tcrossprod functions**.

The tutorial consists of these content blocks:

Here’s the step-by-step process…

## Creation of Example Data

The first step is to create some data that we can use in the examples later on:

my_mat <- matrix(1:9, nrow = 3) # Create example matrix my_mat # Print example matrix |

my_mat <- matrix(1:9, nrow = 3) # Create example matrix my_mat # Print example matrix

Table 1 shows that our example data is composed of three rows and three columns.

Next, we also have to create an example vector:

my_vec <- 1:3 # Create example vector my_vec # Print example vector # [1] 1 2 3 |

my_vec <- 1:3 # Create example vector my_vec # Print example vector # [1] 1 2 3

Our vector contains three integers.

## Example 1: Cross Product Using crossprod() Function

In Example 1, I’ll explain how to calculate the cross product of a matrix and a vector.

For this, we can apply the crossprod function as shown in the following R code:

my_crossprod1 <- crossprod(my_mat, my_vec) # Apply crossprod function my_crossprod1 # Print cross product |

my_crossprod1 <- crossprod(my_mat, my_vec) # Apply crossprod function my_crossprod1 # Print cross product

As shown in Table 2, the previous R programming code has created a new matrix object containing the cross product of our matrix and vector objects.

Note that the t function and %*% operator can also be used to compute a cross product matrix, but the crossprod function is usually faster and more efficient.

However, let’s compare the result of the t function and %*% operator to the crossprod function:

my_crossprod2 <- t(my_mat) %*% my_vec # t() function & %*% operator my_crossprod2 # Print cross product |

my_crossprod2 <- t(my_mat) %*% my_vec # t() function & %*% operator my_crossprod2 # Print cross product

The output of the previous syntax is shown in Table 3: We have created exactly the same result as with the crossprod function.

## Example 2: Cross Product of Transpose of Matrix Using tcrossprod() Function

Similar to the crossprod function, we can apply the tcrossprod function to calculate the cross product of a transposed matrix.

Let’s assume that we want to calculate the cross product of the transpose of a matrix. Then, we can apply the code as shown below:

my_tcrossprod1 <- tcrossprod(my_mat) # Apply tcrossprod function my_tcrossprod1 # Print cross product of transpose of matrix |

my_tcrossprod1 <- tcrossprod(my_mat) # Apply tcrossprod function my_tcrossprod1 # Print cross product of transpose of matrix

After executing the previous R programming code the matrix with the tcrossprod result shown in Table 4 has been created.

The tcrossprod function is also a faster alternative to the expression provided by the t function and %*% operator.

However, let’s use this alternative code as well:

my_tcrossprod2 <- my_mat %*% t(my_mat) # %*% operator & t() function my_tcrossprod2 # Print cross product of transpose of matrix |

my_tcrossprod2 <- my_mat %*% t(my_mat) # %*% operator & t() function my_tcrossprod2 # Print cross product of transpose of matrix

After running the previous R syntax the same matrix as after applying the tcrossprod command has been created.

## Video, Further Resources & Summary

In case you need further explanations on the examples of this page, you could have a look at the following video that I have published on my YouTube channel. In the video, I explain the R codes of this article in a live session.

*The YouTube video will be added soon.*

In addition, you may want to read the other RStudio tutorials on my website.

- Calculate Product of Vector & Data Frame
- Multiply Rows of Matrix by Vector in R
- Cartesian Product in R
- Rotate Matrix & Table with t Function
- Inverse of Matrix in R
- R Programming Tutorials

Summary: This article has illustrated how to **apply the crossprod and tcrossprod functions** in R programming. If you have any further questions, don’t hesitate to let me know in the comments section.

**5**/

**5**(

**1**vote )

### Statistics Globe Newsletter