在scala中将向量矢量转换为Matrix

时间:2016-02-28 18:28:51

标签: scala matrix vector scala-breeze

breeze.linalg.Vector[breeze.linalg.Vector[Double]]转换为DenseMatrix的最有效方法是什么?

我尝试使用asDenseMatrix,toBreezeMatrix,创建一个新的DenseMatrix等,但似乎我错过了最简单明了的方法。

1 个答案:

答案 0 :(得分:2)

不是很漂亮,但这可行,可能效率很高:

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: _*)

从行向量构造矩阵似乎很自然,所以我不确定为什么微风库没有为LiteralRows的子类定义implcit Vector。也许对微风图书馆有更多了解的人可以对此发表评论。