Если a
уже существует (например, a = zeros(n, n, n)
), вы можете использовать следующую функцию для индексации главной диагонали, которая должна работать для любого измерения (а также для несимметричных случаев):
diagind(A::AbstractArray{T,N} where T) where N = CartesianIndex.(fill(1:minimum(size(A)), N)...)
Тогда вы можете просто передать:
a[diagind(a)] .= constant
В случае, если вход всегда можно считать диагональным, minimum(size(A))
, конечно, можно заменить просто N
.