1
將breeze.linalg.Vector[breeze.linalg.Vector[Double]]
轉換爲DenseMatrix
的最有效方法是什麼?將矢量矢量轉換爲斯卡拉的矩陣
我嘗試使用asDenseMatrix,toBreezeMatrix,創建一個新的DenseMatrix等,但它好像我缺少最簡單明顯的方法來做到這一點。
將breeze.linalg.Vector[breeze.linalg.Vector[Double]]
轉換爲DenseMatrix
的最有效方法是什麼?將矢量矢量轉換爲斯卡拉的矩陣
我嘗試使用asDenseMatrix,toBreezeMatrix,創建一個新的DenseMatrix等,但它好像我缺少最簡單明顯的方法來做到這一點。
不是真正的漂亮,但是這將工作和可能是相當有效:
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: _*)
從它的行向量構造一個矩陣似乎很自然,所以我不確定爲什麼微風庫不會爲Vector
的子類定義implcit LiteralRows
。也許有更多的微風庫知識的人可以對此發表評論。