|
17 | 17 |
|
18 | 18 | package org.apache.spark.mllib.linalg
|
19 | 19 |
|
20 |
| -import breeze.linalg.{DenseMatrix => BDM} |
| 20 | +import scala.util.Random |
| 21 | + |
| 22 | +import breeze.linalg.{DenseMatrix => BDM, squaredDistance => breezeSquaredDistance} |
21 | 23 | import org.scalatest.FunSuite
|
22 | 24 |
|
23 | 25 | import org.apache.spark.SparkException
|
@@ -175,6 +177,33 @@ class VectorsSuite extends FunSuite {
|
175 | 177 | assert(v.size === x.rows)
|
176 | 178 | }
|
177 | 179 |
|
| 180 | + test("sqdist") { |
| 181 | + val random = new Random() |
| 182 | + for (m <- 1 until 1000 by 100) { |
| 183 | + val nnz = random.nextInt(m) |
| 184 | + |
| 185 | + val indices1 = random.shuffle(0 to m - 1).slice(0, nnz).sorted.toArray |
| 186 | + val values1 = Array.fill(nnz)(random.nextDouble) |
| 187 | + val sparseVector1 = Vectors.sparse(m, indices1, values1) |
| 188 | + |
| 189 | + val indices2 = random.shuffle(0 to m - 1).slice(0, nnz).sorted.toArray |
| 190 | + val values2 = Array.fill(nnz)(random.nextDouble) |
| 191 | + val sparseVector2 = Vectors.sparse(m, indices2, values2) |
| 192 | + |
| 193 | + val denseVector1 = Vectors.dense(sparseVector1.toArray) |
| 194 | + val denseVector2 = Vectors.dense(sparseVector2.toArray) |
| 195 | + |
| 196 | + val squaredDist = breezeSquaredDistance(sparseVector1.toBreeze, sparseVector2.toBreeze) |
| 197 | + |
| 198 | + // SparseVector vs. SparseVector |
| 199 | + assert(Vectors.sqdist(sparseVector1, sparseVector2) ~== squaredDist relTol 1E-8) |
| 200 | + // DenseVector vs. SparseVector |
| 201 | + assert(Vectors.sqdist(denseVector1, sparseVector2) ~== squaredDist relTol 1E-8) |
| 202 | + // DenseVector vs. DenseVector |
| 203 | + assert(Vectors.sqdist(denseVector1, denseVector2) ~== squaredDist relTol 1E-8) |
| 204 | + } |
| 205 | + } |
| 206 | + |
178 | 207 | test("foreachActive") {
|
179 | 208 | val dv = Vectors.dense(0.0, 1.2, 3.1, 0.0)
|
180 | 209 | val sv = Vectors.sparse(4, Seq((1, 1.2), (2, 3.1), (3, 0.0)))
|
|
0 commit comments