1

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

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

4

1 回答 1

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

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

于 2016-02-29T01:24:00.557 回答