From fb743da7b551972a7b97c3805d9f0b725da0c719 Mon Sep 17 00:00:00 2001 From: Liang-Chi Hsieh Date: Tue, 6 Jan 2015 17:25:08 +0800 Subject: [PATCH] Modified for comment and fix bug. --- .../apache/spark/mllib/linalg/Vectors.scala | 5 +++-- .../spark/mllib/linalg/VectorsSuite.scala | 20 +++++++++---------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/mllib/src/main/scala/org/apache/spark/mllib/linalg/Vectors.scala b/mllib/src/main/scala/org/apache/spark/mllib/linalg/Vectors.scala index 6a782b079aac3..d40f13342a3d9 100644 --- a/mllib/src/main/scala/org/apache/spark/mllib/linalg/Vectors.scala +++ b/mllib/src/main/scala/org/apache/spark/mllib/linalg/Vectors.scala @@ -373,8 +373,9 @@ object Vectors { var kv2 = 0 val indices = v1.indices var squaredDistance = 0.0 - var iv1 = indices(kv1) + val nnzv1 = indices.size val nnzv2 = v2.size + var iv1 = if (nnzv1 > 0) indices(kv1) else -1 while (kv2 < nnzv2) { var score = 0.0 @@ -382,7 +383,7 @@ object Vectors { score = v2(kv2) } else { score = v1.values(kv1) - v2(kv2) - if (kv1 < indices.length - 1) { + if (kv1 < nnzv1 - 1) { kv1 += 1 iv1 = indices(kv1) } diff --git a/mllib/src/test/scala/org/apache/spark/mllib/linalg/VectorsSuite.scala b/mllib/src/test/scala/org/apache/spark/mllib/linalg/VectorsSuite.scala index 2642521b97765..85ac8ccebfc59 100644 --- a/mllib/src/test/scala/org/apache/spark/mllib/linalg/VectorsSuite.scala +++ b/mllib/src/test/scala/org/apache/spark/mllib/linalg/VectorsSuite.scala @@ -178,16 +178,16 @@ class VectorsSuite extends FunSuite { } test("sqdist") { - val random = new Random(System.nanoTime()) - for (m <- 1 until 1000 by 10) { - val nnz = random.nextInt(m) + 1 + val random = new Random() + for (m <- 1 until 1000 by 100) { + val nnz = random.nextInt(m) - val indices1 = random.shuffle(0 to m - 1).toArray.slice(0, nnz).sorted - val values1 = indices1.map(i => random.nextInt(m + 1) * random.nextDouble()) + val indices1 = random.shuffle(0 to m - 1).slice(0, nnz).sorted.toArray + val values1 = Array.fill(nnz)(random.nextDouble) val sparseVector1 = Vectors.sparse(m, indices1, values1) - val indices2 = random.shuffle(0 to m - 1).toArray.slice(0, nnz).sorted - val values2 = indices2.map(i => random.nextInt(m + 1) * random.nextDouble()) + val indices2 = random.shuffle(0 to m - 1).slice(0, nnz).sorted.toArray + val values2 = Array.fill(nnz)(random.nextDouble) val sparseVector2 = Vectors.sparse(m, indices2, values2) val denseVector1 = Vectors.dense(sparseVector1.toArray) @@ -196,11 +196,11 @@ class VectorsSuite extends FunSuite { val squaredDist = breezeSquaredDistance(sparseVector1.toBreeze, sparseVector2.toBreeze) // SparseVector vs. SparseVector - assert(Vectors.sqdist(sparseVector1, sparseVector2) === squaredDist) + assert(Vectors.sqdist(sparseVector1, sparseVector2) ~== squaredDist relTol 1E-8) // DenseVector vs. SparseVector - assert(Vectors.sqdist(denseVector1, sparseVector2) === squaredDist) + assert(Vectors.sqdist(denseVector1, sparseVector2) ~== squaredDist relTol 1E-8) // DenseVector vs. DenseVector - assert(Vectors.sqdist(denseVector1, denseVector2) === squaredDist) + assert(Vectors.sqdist(denseVector1, denseVector2) ~== squaredDist relTol 1E-8) } }