# Triangular Arrays in julia?

**URL:** <https://discourse.julialang.org/t/triangular-arrays-in-julia/930>\
**Category:** Offtopic\
**Created:** [December 13, 2016, 8:11pm UTC](https://discourse.julialang.org/t/triangular-arrays-in-julia/930 "2016-12-13T20:11:00Z")\
**Posts on this page:** 6\
**Page:** 2

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [December 20, 2016, 4:45am UTC](https://discourse.julialang.org/t/triangular-arrays-in-julia/930/24 "2016-12-20T04:45:24Z")

</div>

In BandedMatrices.jl, we do something similar using a `band` keyword:

```julia
A = bzeros(Float64,10,10,1,1) # 10 x 10 tridiagonal matrix
A[band(1)] = 1:9 # set upper diagonal

```

Something similar could be done for triangular matrices to accomplish what you are trying to do without overloading `:` in a confusing way:

```julia
a = UpperTriangular(ones(4,4))
a[UpperTriangle] = 1:10 # set upper triangle entries

```

---

<div class="post-metadata">

**Author:** ![mkborregaard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkborregaard/32/556_2.png) [@mkborregaard](https://discourse.julialang.org/u/mkborregaard)\
**Post date:** [December 20, 2016, 6:10am UTC](https://discourse.julialang.org/t/triangular-arrays-in-julia/930/25 "2016-12-20T06:10:03Z")

</div>

Cool. In fact my deleted post was a suggestion to allow arrays to do exactly that (`a[:UpperTriangular]`), but then I thought I hadn’t thought it all the way through. That is a nice and elegant solution IMO.

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [December 20, 2016, 6:29am UTC](https://discourse.julialang.org/t/triangular-arrays-in-julia/930/26 "2016-12-20T06:29:27Z")

</div>

In my example, `UpperTriangle` is meant to be a singleton type, so you can override `getindex(A,::Type{UpperTriangle})`

---

<div class="post-metadata">

**Author:** ![mkborregaard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkborregaard/32/556_2.png) [@mkborregaard](https://discourse.julialang.org/u/mkborregaard)\
**Post date:** [December 20, 2016, 7:45am UTC](https://discourse.julialang.org/t/triangular-arrays-in-julia/930/27 "2016-12-20T07:45:41Z")

</div>

Would that functionality belong in BandedMatrices then?

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [December 20, 2016, 8:39am UTC](https://discourse.julialang.org/t/triangular-arrays-in-julia/930/28 "2016-12-20T08:39:48Z")

</div>

I think it’d make more sense in a TriangularMatrices.jl package

---

<div class="post-metadata">

**Author:** ![alan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/alan/32/15970_2.png) [@alan](https://discourse.julialang.org/u/alan)\
**Post date:** [June 7, 2020, 7:12pm UTC](https://discourse.julialang.org/t/triangular-arrays-in-julia/930/29 "2020-06-07T19:12:07Z")

</div>

Four years late, but here’s an answer anyway. Yes, it must be possible to manipulate triangular matrices using BLAS, because that is what LINPACK does in Fortran.

[Previous page](https://discourse.julialang.org/t/triangular-arrays-in-julia/930.md?page=1)
