# LU Decomposition - return permutation matrix instead of vector

**URL:** <https://discourse.julialang.org/t/lu-decomposition-return-permutation-matrix-instead-of-vector/41745>\
**Category:** New to Julia\
**Tags:** question, linearalgebra\
**Created:** [June 19, 2020, 7:26pm UTC](https://discourse.julialang.org/t/lu-decomposition-return-permutation-matrix-instead-of-vector/41745 "2020-06-19T19:26:56Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![ander](https://avatars.discourse-cdn.com/v4/letter/a/5daacb/32.png) [@ander](https://discourse.julialang.org/u/ander)\
**Post date:** [June 19, 2020, 7:26pm UTC](https://discourse.julialang.org/t/lu-decomposition-return-permutation-matrix-instead-of-vector/41745/1 "2020-06-19T19:26:56Z")

</div>

Dear Community,

Is there any way to return in Julia full permutation matrix instead of vector?

> using LinearAlgebra  
> A = [0 4 2; 10 2 1; 1 1 1]  
> L,U,P = lu(A)

P is returned as [2,1,3].  
However, I would like to have in the following form: [0,1,0;1,0,0;0,0,1]

Is there any way to enforce this in Julia?

Thank you in advance for any help

---

<div class="post-metadata">

**Author:** ![dpsanders](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dpsanders/32/3573_2.png) [@dpsanders](https://discourse.julialang.org/u/dpsanders)\
**Post date:** [June 19, 2020, 7:30pm UTC](https://discourse.julialang.org/t/lu-decomposition-return-permutation-matrix-instead-of-vector/41745/2 "2020-06-19T19:30:17Z")

</div>

```julia

julia> p = [2, 1, 3];

julia> n = length(p);

julia> II = Matrix{Int}(I, n, n)
3×3 Array{Int64,2}:
 1 0 0
 0 1 0
 0 0 1

julia> II[p, :]
3×3 Array{Int64,2}:
 0 1 0
 1 0 0
 0 0 1

```

---

<div class="post-metadata">

**Author:** ![roble](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/roble/32/12303_2.png) [@roble](https://discourse.julialang.org/u/roble)\
**Post date:** [June 19, 2020, 8:36pm UTC](https://discourse.julialang.org/t/lu-decomposition-return-permutation-matrix-instead-of-vector/41745/3 "2020-06-19T20:36:20Z")

</div>

Alternatively you can also use `I(n)` to get the identity matrix.

```julia
julia> II = Matrix{Int}(I, 3, 3)
3×3 Array{Int64,2}:
 1 0 0
 0 1 0
 0 0 1

julia> I(3)
3×3 Diagonal{Bool,Array{Bool,1}}:
 1 ⋅ ⋅
 ⋅ 1 ⋅
 ⋅ ⋅ 1

```

---

<div class="post-metadata">

**Author:** ![dpsanders](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dpsanders/32/3573_2.png) [@dpsanders](https://discourse.julialang.org/u/dpsanders)\
**Post date:** [June 19, 2020, 9:30pm UTC](https://discourse.julialang.org/t/lu-decomposition-return-permutation-matrix-instead-of-vector/41745/4 "2020-06-19T21:30:27Z")

</div>

Except then indexing into it with the vector gives you a sparse matrix which may or may not be what you want / need.

```julia
julia> I(3)[p, :]
3×3 SparseArrays.SparseMatrixCSC{Bool,Int64} with 3 stored entries:
  [2, 1] = 1
  [1, 2] = 1
  [3, 3] = 1

```

---

<div class="post-metadata">

**Author:** ![roble](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/roble/32/12303_2.png) [@roble](https://discourse.julialang.org/u/roble)\
**Post date:** [June 19, 2020, 9:48pm UTC](https://discourse.julialang.org/t/lu-decomposition-return-permutation-matrix-instead-of-vector/41745/5 "2020-06-19T21:48:03Z")

</div>

Yeah, I see the issue here…

---

<div class="post-metadata">

**Author:** ![YingboMa](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yingboma/32/2181_2.png) [@YingboMa](https://discourse.julialang.org/u/YingboMa)\
**Post date:** [June 19, 2020, 10:25pm UTC](https://discourse.julialang.org/t/lu-decomposition-return-permutation-matrix-instead-of-vector/41745/6 "2020-06-19T22:25:01Z")

</div>

Or simply

```julia
julia> using LinearAlgebra

julia> A = rand(5,5);

julia> lu(A).P
5×5 Array{Float64,2}:
 0.0 1.0 0.0 0.0 0.0
 0.0 0.0 1.0 0.0 0.0
 0.0 0.0 0.0 1.0 0.0
 0.0 0.0 0.0 0.0 1.0
 1.0 0.0 0.0 0.0 0.0

```

---

<div class="post-metadata">

**Author:** ![dpo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dpo/32/3335_2.png) [@dpo](https://discourse.julialang.org/u/dpo)\
**Post date:** [June 20, 2020, 4:20am UTC](https://discourse.julialang.org/t/lu-decomposition-return-permutation-matrix-instead-of-vector/41745/7 "2020-06-20T04:20:12Z")

</div>

Why is that a Float64 matrix instead of an Int matrix?! The permutation vector is an Int vector.

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [June 20, 2020, 7:17am UTC](https://discourse.julialang.org/t/lu-decomposition-return-permutation-matrix-instead-of-vector/41745/8 "2020-06-20T07:17:53Z")

</div>

I wonder if you read the docs of `lu`, since you can get it directly as a property:

```julia
julia> lu(A).P
3×3 Array{Float64,2}:
 0.0 1.0 0.0
 1.0 0.0 0.0
 0.0 0.0 1.0

```
