# Can views function on diag?

**URL:** https://discourse.julialang.org/t/can-views-function-on-diag/128943
**Category:** General Usage
**Tags:** linearalgebra, views, feature-request
**Created:** [May 13, 2025, 2:35am UTC](https://discourse.julialang.org/t/can-views-function-on-diag/128943 "2025-05-13T02:35:47Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![WalterMadelim](https://avatars.discourse-cdn.com/v4/letter/w/3e96dc/32.png) [@WalterMadelim](https://discourse.julialang.org/u/WalterMadelim)
#### Post date: [May 13, 2025, 2:35am UTC](https://discourse.julialang.org/t/can-views-function-on-diag/128943/1 "2025-05-13T02:35:47Z")

</div>

Diagonal vector is a central vector that can be sliced from a `Matrix`, can it be `view`ed?

```julia
julia> using LinearAlgebra

julia> A = rand(-9:9, 2, 2)
2×2 Matrix{Int64}:
 -1 6
  6 -9

julia> @views d = diag(A)
2-element Vector{Int64}:
 -1
 -9

julia> d .= 0 # set the diagonals to zero
2-element Vector{Int64}:
 0
 0

julia> A # it doesn't work
2×2 Matrix{Int64}:
 -1 6
  6 -9

```

If it functions, it could also be used to, e.g. make a matrix become diagonally dominant, become posdef etc.

---

<div class="post-metadata">

### Author: ![karei](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/karei/32/214809_2.png) [@karei](https://discourse.julialang.org/u/karei)
#### Post date: [May 13, 2025, 3:06am UTC](https://discourse.julialang.org/t/can-views-function-on-diag/128943/2 "2025-05-13T03:06:21Z")

</div>

```julia
julia> A = rand(-9:9, 2, 2)
2×2 Matrix{Int64}:
 -5 -2
 -1 0

julia> diagidx=[CartesianIndex(i,i) for i=1:2]
2-element Vector{CartesianIndex{2}}:
 CartesianIndex(1, 1)
 CartesianIndex(2, 2)

julia> view(A,diagidx)
2-element view(::Matrix{Int64}, CartesianIndex{2}[CartesianIndex(1, 1), CartesianIndex(2, 2)]) with eltype Int64:
 -5
  0

```

The `diag` function creates a new vector, so that method won’t work.

---

<div class="post-metadata">

### Author: ![danielwe](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/danielwe/32/35657_2.png) [@danielwe](https://discourse.julialang.org/u/danielwe)
#### Post date: [May 13, 2025, 3:17am UTC](https://discourse.julialang.org/t/can-views-function-on-diag/128943/3 "2025-05-13T03:17:22Z")

</div>

LinearAlgebra.jl provides the `diagind` function so you don’t have to build `diagidx` yourself, and it returns a unit range instead of a vector if possible such that you get a manifestly strided view:

```julia
julia> using LinearAlgebra

julia> A = rand(-9:9, 2, 2)
2×2 Matrix{Int64}:
  4 -4
 -4 0

julia> @view A[diagind(A)]
2-element view(::Vector{Int64}, 1:3:4) with eltype Int64:
 4
 0

```

---

<div class="post-metadata">

### Author: ![mcabbott](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mcabbott/32/6603_2.png) [@mcabbott](https://discourse.julialang.org/u/mcabbott)
#### Post date: [May 13, 2025, 3:54am UTC](https://discourse.julialang.org/t/can-views-function-on-diag/128943/4 "2025-05-13T03:54:18Z")

</div>

Julia 1.12 also has `diagview`, which is basically `@view A[diagind(A)]`.
