将行矩阵转换为 Breeze 密集矩阵
Converting a Row Matrix into a Breeze Dense Matrix
我有一个 MLLIB 分布式行矩阵,其中的行顺序无关紧要。有什么方法可以轻松地将其转换为 breeze 密集矩阵吗?我想 row-by-row 映射可能会起作用,但我对整个 breeze 相对不熟悉。
编辑:使用 X.rows.map(x => x.toArray)
,我设法将其转换为 org.apache.spark.rdd.RDD[Array[Double]] 形式的 RDD。我相信这是朝着正确方向迈出的一步...
最终使用下面的代码让它工作。
import breeze.linalg.{DenseVector => BDV, DenseMatrix => BDM, sum}
val arr = X.rows.map(x => x.toArray).collect.flatten
val dm = new BDM(X.numRows().toInt, X.numCols().toInt, arr)
谢谢 @ar7 的帮助。
对您的 RDD 进行收集。它会 return 你 Array[Array[Double]]
。
val array = your_rdd.collect()
将数组的数组转换为矩阵的方法如下:
val dm = DenseMatrix(array.map(_.toArray):_*)
部分答案来自here。希望这能解决问题。
我有一个 MLLIB 分布式行矩阵,其中的行顺序无关紧要。有什么方法可以轻松地将其转换为 breeze 密集矩阵吗?我想 row-by-row 映射可能会起作用,但我对整个 breeze 相对不熟悉。
编辑:使用 X.rows.map(x => x.toArray)
,我设法将其转换为 org.apache.spark.rdd.RDD[Array[Double]] 形式的 RDD。我相信这是朝着正确方向迈出的一步...
最终使用下面的代码让它工作。
import breeze.linalg.{DenseVector => BDV, DenseMatrix => BDM, sum}
val arr = X.rows.map(x => x.toArray).collect.flatten
val dm = new BDM(X.numRows().toInt, X.numCols().toInt, arr)
谢谢 @ar7 的帮助。
对您的 RDD 进行收集。它会 return 你 Array[Array[Double]]
。
val array = your_rdd.collect()
将数组的数组转换为矩阵的方法如下:
val dm = DenseMatrix(array.map(_.toArray):_*)
部分答案来自here。希望这能解决问题。