Сумма по главной диагонали в юлии - PullRequest
4 голосов
/ 24 октября 2019

Как сложить по главной диагонали, не используя основную диагональ в матрице, в julia?

Я использовал sum=tril(a)-1, но это не работает в julia.

Я знаю, что мне нужна маска, но я не знаю, как ее использовать.

Ответы [ 2 ]

6 голосов
/ 24 октября 2019

Вы ищете модуль LinearAlgebra , который является частью стандартной библиотеки и содержит функцию tril:

julia> using LinearAlgebra

julia> A = ones(5, 5)
5×5 Array{Float64,2}:
 1.0  1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0  1.0

julia> tril(A, -1)
5×5 Array{Float64,2}:
 0.0  0.0  0.0  0.0  0.0
 1.0  0.0  0.0  0.0  0.0
 1.0  1.0  0.0  0.0  0.0
 1.0  1.0  1.0  0.0  0.0
 1.0  1.0  1.0  1.0  0.0

julia> sum(tril(A, -1))
10.0
5 голосов
/ 24 октября 2019
Функция

tril входит в стандартную библиотеку линейной алгебры. Чтобы использовать его, вам необходимо импортировать модуль LinearAlgebra. tril принимает второй необязательный аргумент, чтобы указать, где вы хотите начать нижнюю треугольную часть. Вы можете установить его на -1, чтобы не брать основную диагональ.

using LinearAlgebra

A = rand(5, 5)
lowerA = tril(A, -1)
println(sum(lowerA)) 

Возможно, вы захотите взглянуть на ленивые конструкторы нижнего треугольного вида, такие как LowerTriangular или OneUnitLowerTriangular.

...