我有一个关于在星火矩阵的一个问题。
假设我有一个名为X这样RowMatrix
:
0.5 0.5
0.25 0.0625
0.125 0.125
0.0625 0.0625
0.0625 0.25
现在我想要做的就是乘这个RowMatrix
与RowMatrix
X的转置版本
0.5 0.25 0.125 0.0625 0.0625
0.5 0.0625 0.125 0.0625 0.25
现在,所有我知道我不能乘以RowMatrix
与另一RowMatrix
,它必须是一个RowMatrix
和本地矩阵。因此,我试图RowMatrix
转换为使用此代码本地密集矩阵:
val arr = X.rows.map(x=>x.toArray).collect.flatten
val Xlocal = Matrices.dense(X.numRows.toInt,X.numCols.toInt,arr)
不过,这并不因为RowMatrix
是基于行的,我认为正确的转换呢?我真的不知道和当地的密集矩阵存储在列优先顺序,因此顺序弄乱了。
有人可以帮助我如何实现这一点?
一个RowMatrix
没有任何行指数和当行顺序并不重要,才应使用。如果顺序不会不管使用IndexedRowMatrix
代替。
这是可能的RowMatrix
转换为IndexedRowMatrix
但要注意顺序不能保证,这是最好直接使用IndexedRowMatrix
。假设rowMat
是转换矩阵:
val indRowMax = new IndexedRowMatrix(rowMat.rows.zipWithIndex().map{ case (v, id) => IndexedRow(id, v)})
一个IndexedRowMatrix
可以很容易地转换为一个局部矩阵:
val localMat = indRowMax.toBlockMatrix().toLocalMatrix()
并乘以转置可以如下进行:
indRowMax.multiply(localMat.transpose)