Учитывая список столбцов и строк, я хочу создать подматрицу холесной факторизации. Пример:Создайте подматрицу UpperTriangularMatrix в Julia
julia> A = rand(10,10)
julia> R = chol(A'*A)
julia> ind = [1,3,6,8,9]
julia> R[ind,ind]
Однако это приводит к ошибке:
ERROR: BoundsError: attempt to access 5x5
UpperTriangular{Float64,Array{Float64,2}}:
1.28259 0.0 0.0 0.0 0.0
0.0 6.51646e-314 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0
at index [2,1]
in _unsafe_getindex at multidimensional.jl:197
in getindex at abstractarray.jl:483
Я понимаю, что это будет работать для типичной матрицы, но UpperTriangular
типа, очевидно, требует что-то другое ... Я не могу найти документацию по этому вопросу.
Так что я бы сделал 'UpperTriangular (full (R) [ind, ind])', если я планирую использовать подматрицу для дальнейших вычислений? Это кажется неэффективным (на практике у меня есть большая матрица 'R') ... –
Типы треугольников - это просто обертки вокруг полных матриц. Они просто говорят Джулии игнорировать все элементы выше или ниже диагонали. Повторная упаковка результата не копирует базовые данные, поэтому на самом деле все это неэффективно. –
Ницца! Это хорошо знать. Может быть, мне стоит изучить это как разреженную верхнюю треугольную матрицу, тогда ... Я предположил, что нижние диагональные нули не были сохранены в памяти по умолчанию. –