尝试将RowMatrix转换为BDM(Breeze Dense Matrix),不确定如何继续 需要实施
def getDenseMatrix(A: RowMatrix): BDM[Double] = {
//write code here
}
其他问题:
如何访问RowMatrix中的特定行?
for(i< -0 to(RowM.numCols()。toInt-1)){ //如何访问RowM.rows(i) }
如何访问RowMatrix中的特定列?
for(i< -0 to(RowM.numCols()。toInt-1)){ //如何访问RowM.rows.map(f => f(i)) }
答案 0 :(得分:4)
阅读rowMatrix中的源代码,您需要源代码,它是私有方法。代码如下:
def toBreeze(mat:RowMatrix):BDM[Double] = {
val m = mat.numRows()
val n = mat.numCols()
val result = BDM.zeros[Double](m.toInt,n.toInt)
var i = 0
mat.rows.collect().foreach{Vector =>
Vector.foreachActive { case(index,value) =>
result(i,index) = value
}
i+=1
}
result
}
答案 1 :(得分:2)
如果您没有foreachActive,请使用:
def toBreeze(X: RowMatrix): BDM[Double]{
val m = X.numRows().toInt
val n = X.numCols().toInt
val mat = BDM.zeros[Double](m, n)
var i = 0
X.rows.collect().map{
case sp: SparseVector => (sp.indices, sp.values)
case dp: DenseVector => (Range(0,n).toArray, dp.values)
}.foreach {
case (indices, values) => indices.zip(values).foreach { case (j, v) =>mat(i, j) = v }
i += 1
}
mat
}
这与某一点并行并且也是如此。