Is there a function that creates anti diagonal matrix from some vector, something like reverse diag() ?
-
Login or Register
- Log in with
------------------------------------------------- mata (type end to exit) ------------------------------------------
:
: real matrix antiDiag(real colvector v)
> {
>
> real colvector p
>
> p = 1::rows(v)
> _sort(p,-1)
>
> return(diag(v)[,p'])
>
> }
:
: antiDiag(1::10)
1 2 3 4 5 6 7 8 9 10
+---------------------------------------------------+
1 | 0 0 0 0 0 0 0 0 0 1 |
2 | 0 0 0 0 0 0 0 0 2 0 |
3 | 0 0 0 0 0 0 0 3 0 0 |
4 | 0 0 0 0 0 0 4 0 0 0 |
5 | 0 0 0 0 0 5 0 0 0 0 |
6 | 0 0 0 0 6 0 0 0 0 0 |
7 | 0 0 0 7 0 0 0 0 0 0 |
8 | 0 0 8 0 0 0 0 0 0 0 |
9 | 0 9 0 0 0 0 0 0 0 0 |
10 | 10 0 0 0 0 0 0 0 0 0 |
+---------------------------------------------------+
:
: end
--------------------------------------------------------------------------------------------------------------------
Comment