diff --git a/mllib/src/main/scala/org/apache/spark/mllib/linalg/rdd/RowRDDMatrix.scala b/mllib/src/main/scala/org/apache/spark/mllib/linalg/rdd/RowRDDMatrix.scala index a43ac3635a6e7..076abf4dd8d4c 100644 --- a/mllib/src/main/scala/org/apache/spark/mllib/linalg/rdd/RowRDDMatrix.scala +++ b/mllib/src/main/scala/org/apache/spark/mllib/linalg/rdd/RowRDDMatrix.scala @@ -139,17 +139,18 @@ class RowRDDMatrix( val V = Matrices.dense(n, sk, util.Arrays.copyOfRange(u.data, 0, n * sk)) if (computeU) { - val N = new BDM[Double](sk, n, util.Arrays.copyOfRange(v.data, 0, sk * n)) + // N = Vk * Sk^{-1} + val N = new BDM[Double](n, sk, util.Arrays.copyOfRange(u.data, 0, n * sk)) var i = 0 var j = 0 - while (i < sk) { - j = 0 - val sigma = sigmas(i) - while (j < n) { + while (j < sk) { + i = 0 + val sigma = sigmas(j) + while (i < n) { N(i, j) /= sigma - j += 1 + i += 1 } - i += 1 + j += 1 } val U = this.multiply(Matrices.fromBreeze(N)) SingularValueDecomposition(U, s, V) diff --git a/mllib/src/test/scala/org/apache/spark/mllib/linalg/rdd/CoordinateRDDMatrixSuite.scala b/mllib/src/test/scala/org/apache/spark/mllib/linalg/rdd/CoordinateRDDMatrixSuite.scala index 7911c4103e434..5a5af5106b510 100644 --- a/mllib/src/test/scala/org/apache/spark/mllib/linalg/rdd/CoordinateRDDMatrixSuite.scala +++ b/mllib/src/test/scala/org/apache/spark/mllib/linalg/rdd/CoordinateRDDMatrixSuite.scala @@ -24,7 +24,7 @@ import org.apache.spark.mllib.linalg.Vectors class CoordinateRDDMatrixSuite extends FunSuite with LocalSparkContext { - val m = 4 + val m = 5 val n = 4 var mat: CoordinateRDDMatrix = _ @@ -46,8 +46,8 @@ class CoordinateRDDMatrixSuite extends FunSuite with LocalSparkContext { } test("size") { - assert(mat.numRows() === 4) - assert(mat.numCols() === 5) + assert(mat.numRows() === m) + assert(mat.numCols() === n) } test("toIndexedRowRDDMatrix") { diff --git a/mllib/src/test/scala/org/apache/spark/mllib/linalg/rdd/RowRDDMatrixSuite.scala b/mllib/src/test/scala/org/apache/spark/mllib/linalg/rdd/RowRDDMatrixSuite.scala index 2b85481df4d6d..c6bd2fbcc0e2a 100644 --- a/mllib/src/test/scala/org/apache/spark/mllib/linalg/rdd/RowRDDMatrixSuite.scala +++ b/mllib/src/test/scala/org/apache/spark/mllib/linalg/rdd/RowRDDMatrixSuite.scala @@ -80,7 +80,8 @@ class RowRDDMatrixSuite extends FunSuite with LocalSparkContext { val brzV = svd.V.toBreeze.asInstanceOf[BDM[Double]] val rows = U.rows.collect() val brzUt = new BDM[Double](n, m, rows.flatMap(r => r.toArray)) - assert(closeToZero(brzUt.t * brzDiag(brzSigma) * brzV.t - A)) + val UsVt = brzUt.t * brzDiag(brzSigma) * brzV.t + assert(closeToZero(UsVt - A)) val VtV: BDM[Double] = brzV.t * brzV assert(closeToZero(VtV - BDM.eye[Double](n))) val UtU = U.computeGramianMatrix().toBreeze.asInstanceOf[BDM[Double]]