math.net преобразование матрицы в Generic.Matrix ‹float›

let v = [| 5.0; 2.0; 3.0; 11.0 |]
let m2 = new DenseMatrix(2, 2, v)
let invm = m2.Inverse()
let invt = m2.Transpose()

Здесь m2 - это Matrix. Однако invm и invt равны Generic.Matrix<float>. Почему это преобразование?


person NoIdeaHowToFixThis    schedule 12.11.2013    source источник


Ответы (1)


Вкратце, поскольку подписи DenseMatrix.Inverse() и DenseMatrix.Transpose()

DenseMatrix.Inverse: unit -> Matrix<float>
DenseMatrix.Transpose: unit -> Matrix<float>

Matrix - абстрактный класс, который обеспечивает общую реализацию методов Inverse и Transpose для любой матрицы. Конкретные производные подклассы DenseMatrix, SparseMatrix и DiagonalMatrix просто оптимизируют способ хранения матричных данных в зависимости от каждого варианта использования.

Вы можете поднять

let m2 = new DenseMatrix(2, 2, v) :> Matrix<float>

и манипулировать универсальными типами после создания матрицы. Вы можете проверить связанную тему Матрица против DenseMatrix для получения дополнительных сведений.

person Gene Belitski    schedule 12.11.2013
comment
Когда вы создаете матрицу, используя либо матричную функцию (matrix [[ 5.0; 3.0]; [2.0; 11.0]]), либо одну из фабричных функций в модуле DenseMatrix расширений F #, матрица автоматически будет универсального типа. - person Christoph Rüegg; 14.12.2013