math.net DenseVectors против DenseMatrix 1xn | nx1

Это действительно простой материал, но, поскольку я новичок в math.net, мне может понадобиться указать правильное направление:

let a = new DenseVector([| 5.0; 2.0; 3.0; |])
let m = new DenseMatrix(3, 3, 1.0)
let r = a * m 
let r2 = m * a

приводит к:

> r;;
val it : DenseVector = seq [10.0; 10.0; 10.0]
> r2;;
val it : DenseVector = seq [10.0; 10.0; 10.0]

Умножение матрицы на вектор требует здесь слишком много свободы. Мне нужно обеспечить надлежащие проверки размерности. Должен ли я просто работать с DenseMatrix, создавая матрицы 1xn, nx1? Это в основном делает Vectors и DenseVectors избыточными в моем случае.


person NoIdeaHowToFixThis    schedule 12.11.2013    source источник
comment
Я не согласен: решение некоторых из вышеперечисленных проблем в конечном итоге может быть объединено в уникальную реализацию; и более широкая картина того, чего я пытаюсь достичь, может помочь.   -  person NoIdeaHowToFixThis    schedule 12.11.2013


Ответы (1)


Наблюдаемое поведение матрично-векторного и векторно-матричного умножения в библиотеке является преднамеренным. Различение векторов column и row невозможно в рамках простого типа Vector, поэтому явные операции умножения матрицы на вектор и умножения вектора на матрицу просто имеют соответствующие сигнатуры:

Matrix.Multiply: Vector -> Vector // matrix-by-vector

а также

Matrix.LeftMultiply: Vector -> Vector // vector-by-matrix

где в первом случае и аргумент, и результат предполагаются column векторами, а во втором случае оба предполагаются row векторами.

Библиотека всегда предполагает «правильную» ориентацию вектора при цепочке операций в более сложных выражениях, в то же время обеспечивая другие проверки размерности.

Если вы хотите по какой-либо причине явно отличить row от column векторов и нести, при необходимости, бремя явных транспозиций, то использование 1-by-n и n-by-1 матриц вместо row и column векторов соответственно - это путь. В этом случае, если размеры матрицы не совпадают, библиотека будет выдавать System.ArgumentException вместо молчаливого предположения о "правильной" транспозиции.

person Gene Belitski    schedule 12.11.2013