#swift #linear-algebra #accelerate
#swift #линейная алгебра #ускорение
Вопрос:
Я работаю с платформой Accelerate от Apple, используя разреженные матричные операции.
Я создал разреженную матрицу таким образом:
var values: Array<Double> = [0.125, 0.08, -0.01, 0.405, -0.02, 0.005]
var rowIndices: [Int32] = [0, 1, 2, // Column 0
3, 4, // Column 1
5 ] // Column 3
var columnStarts = [0, 3, 5, 6]
let structure: SparseMatrixStructure = rowIndices.withUnsafeMutableBufferPointer { rowIndicesPtr in
columnStarts.withUnsafeMutableBufferPointer { columnStartsPtr in
var attributes = SparseAttributes_t()
attributes.triangle = SparseLowerTriangle
attributes.kind = SparseSymmetric
return SparseMatrixStructure(
rowCount: 3,
columnCount: 3,
columnStarts: columnStartsPtr.baseAddress!,
rowIndices: rowIndicesPtr.baseAddress!,
attributes: attributes,
blockSize: 1
)
}
Я делаю вызов для факторизации матрицы:
let llt: SparseOpaqueFactorization_Double = values.withUnsafeMutableBufferPointer { valuesPtr in
let a = SparseMatrix_Double(
structure: structure,
data: valuesPtr.baseAddress!
)
return SparseFactor(SparseFactorizationCholesky, a)
}
Мне действительно нужно проверить, каков результат факторизации, т. Е. Распечатать результат. Не вижу никакого способа даже получить результат, не говоря уже о его распечатке.
Кто-нибудь может помочь мне понять, как получить результат и распечатать его?
Ответ №1:
В конце концов решил это сам. Я использовал:
let subfactors = SparseCreateSubfactor(SparseSubfactorL, llt)
чтобы извлечь объект подфакторов из факторизации, затем умножьте подфакторы на идентификационную матрицу, чтобы получить факторизацию.