Не очень красиво, но это будет работать и, вероятно, довольно эффективно:
val v: Vector[Vector[Double]] = ???
val matrix = DenseMatrix(v.valuesIterator.map(_.valuesIterator.toArray).toSeq: _*)
Вы можете сделать это немного лучше, определив неявный LiteralRow
для подклассов Vector
следующим образом:
implicit def vectorLiteralRow[E, V](implicit ev: V <:< Vector[E]) = new LiteralRow[V, E] {
def foreach[X](row: V, fn: (Int, E) => X): Unit = row.foreachPair(fn)
def length(row: V) = row.length
}
Теперь с этим неявным объемом вы можете использовать
val matrix = DenseVector(v.toArray: _*)
Кажется довольно естественным построить матрицу из ее векторов-строк, поэтому я не уверен, почему библиотека breeze не определяет implcit LiteralRows
для подклассов Vector
. Может быть, кто-то, кто больше разбирается в библиотеке бриза, может прокомментировать это.
person
Jason Lenderman
schedule
29.02.2016