Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Transform Identity Matrix

Tags:

r

matrix

I have identity matrix which can be generated via diag(5)

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0    0    0
[2,]    0    1    0    0    0
[3,]    0    0    1    0    0
[4,]    0    0    0    1    0
[5,]    0    0    0    0    1

I want to convert it to the matrix wherein series starts after 1. For example 1st column, values 1 through 5. Second column - values 1 through 4.

Desired Output

    [,1] [,2] [,3] [,4] [,5]
[1,]    1   0   0   0   0
[2,]    2   1   0   0   0
[3,]    3   2   1   0   0
[4,]    4   3   2   1   0
[5,]    5   4   3   2   1
like image 711
Ujjawal Bhandari Avatar asked Dec 23 '21 12:12

Ujjawal Bhandari


People also ask

What is the identity transformation in 2d?

The identity matrix An important matrix is the identity matrix: It transforms a point to itself: P1=P2=I·P1. This can be interpreted as. - translation with (0,0) - rotation with 0 degrees, since cos (0)=1 and sin (0) =0.

Is the identity transformation?

The identity transform is a data transformation that copies the source data into the destination data without change. The identity transformation is considered an essential process in creating a reusable transformation library.

What is identity transformation in linear transformation?

The identity map idV :V V, idV v v v V, is a linear transformation whose matrix is the identity matrix I with respect to any single choice of basis B for V. 1. Page 2. Similar matrices. Now let V be a finite-dimensional vector space, with basis B, and let F :V V be a linear transfor- mation.

What happens when the transformation matrix is identity matrix?

When the transformation matrix [a,b,c,d] is the Identity Matrix (the matrix equivalent of "1") the [x,y] values are not changed: Changing the "b" value leads to a "shear" transformation (try it above): And this one will do a diagonal "flip" about the x=y line (try it also):

What is an identity transformation?

The identity transform is a data transformation that copies the source data into the destination data without change. The identity transformation is considered an essential process in creating a reusable transformation library. By creating a library of variations of the base identity transformation,...

How to prove that two matrices always get an identity?

For example: The above is 2 × 4 matrix as it has 2 rows and 4 columns. Let’s multiply the 2 × 2 identity matrix by C. Hence proved. 3) We always get an identity after multiplying two inverse matrices. If we multiply two matrices which are inverses of each other, then we get an identity matrix.

What is an identity matrix of order n?

An identity matrix is a square matrix in which each of the elements of its principal diagonal is a 1 and each of the other elements is a 0. It is also known as the unit matrix. We represent an identity matrix of order n × n (or n) as I n. Sometimes we denote this simply as I. The mathematical definition of an identity matrix is,


Video Answer


4 Answers

Try the code below (given m <- diag(5))

> (row(m) - col(m) + 1)*lower.tri(m,diag = TRUE)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0    0    0
[2,]    2    1    0    0    0
[3,]    3    2    1    0    0
[4,]    4    3    2    1    0
[5,]    5    4    3    2    1

Another option is using apply + cumsum

> apply(lower.tri(m, diag = TRUE), 2, cumsum)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0    0    0
[2,]    2    1    0    0    0
[3,]    3    2    1    0    0
[4,]    4    3    2    1    0
[5,]    5    4    3    2    1
like image 63
ThomasIsCoding Avatar answered Oct 22 '22 07:10

ThomasIsCoding


1) If d <- diag(5) is the identity matrix then:

pmax(row(d) - col(d) + 1, 0)

giving:

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0    0    0
[2,]    2    1    0    0    0
[3,]    3    2    1    0    0
[4,]    4    3    2    1    0
[5,]    5    4    3    2    1

2) This alternative is slightly longer (though still a one-liner) but also works if the columns of d are rearranged and/or some columns are missing. For example,

dd <- d[, 4:1] # test data
pmax(outer(1:nrow(dd) + 1, max.col(t(dd)), `-`), 0)

giving the same result for d and this for dd:

     [,1] [,2] [,3] [,4]
[1,]    0    0    0    1
[2,]    0    0    1    2
[3,]    0    1    2    3
[4,]    1    2    3    4
[5,]    2    3    4    5
like image 5
G. Grothendieck Avatar answered Oct 22 '22 05:10

G. Grothendieck


A solution based on nested cumsum:

n <- 5
m <- diag(n)

apply(m, 2, function(x) cumsum(cumsum(x)))

#>      [,1] [,2] [,3] [,4] [,5]
#> [1,]    1    0    0    0    0
#> [2,]    2    1    0    0    0
#> [3,]    3    2    1    0    0
#> [4,]    4    3    2    1    0
#> [5,]    5    4    3    2    1
like image 4
PaulS Avatar answered Oct 22 '22 05:10

PaulS


One option could be:

x <- 1:5
embed(c(rep(0, length(x) - 1), x), length(x))

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0    0    0
[2,]    2    1    0    0    0
[3,]    3    2    1    0    0
[4,]    4    3    2    1    0
[5,]    5    4    3    2    1
like image 2
tmfmnk Avatar answered Oct 22 '22 05:10

tmfmnk