@@ -198,9 +198,17 @@ function fillband!(A::AbstractMatrix{T}, x, l, u) where T
198198 return A
199199end
200200
201- diagind (m:: Integer , n:: Integer , k:: Integer = 0 ) =
201+ diagind (m:: Integer , n:: Integer , k:: Integer = 0 ) = diagind (IndexLinear (), m, n, k)
202+ diagind (:: IndexLinear , m:: Integer , n:: Integer , k:: Integer = 0 ) =
202203 k <= 0 ? range (1 - k, step= m+ 1 , length= min (m+ k, n)) : range (k* m+ 1 , step= m+ 1 , length= min (m, n- k))
203204
205+ function diagind (:: IndexCartesian , m:: Integer , n:: Integer , k:: Integer = 0 )
206+ Cstart = CartesianIndex (1 + max (0 ,- k), 1 + max (0 ,k))
207+ Cstep = CartesianIndex (1 , 1 )
208+ length = max (0 , k <= 0 ? min (m+ k, n) : min (m, n- k))
209+ StepRangeLen (Cstart, Cstep, length)
210+ end
211+
204212"""
205213 diagind(M, k::Integer=0)
206214
@@ -222,7 +230,7 @@ julia> diagind(A,-1)
222230"""
223231function diagind (A:: AbstractMatrix , k:: Integer = 0 )
224232 require_one_based_indexing (A)
225- diagind (size (A,1 ), size (A,2 ), k)
233+ diagind (IndexStyle (A), size (A,1 ), size (A,2 ), k)
226234end
227235
228236"""
0 commit comments