Эффективный способ извлечь строку и сделать косинусное сходство

В приведенном ниже коде я получаю плотную матрицу V после выполнения SVD. Я хочу

  1. Учитывая набор значений (скажем, 3,7,9).
  2. Я хочу извлечь 3,7 и 9-ю строку Matrix V.
  3. Я хочу вычислить косинусное сходство этих трех строк с каждой строкой матрицы V.
  4. Мне нужно добавить три сходства косинуса, полученные для каждой строки.
  5. Наконец, мне нужен индекс строки с максимальной суммой.
val data = Array(
      Vectors.sparse(5, Seq((1, 1.0), (3, 7.0))),
      Vectors.dense(2.0, 0.0, 3.0, 4.0, 5.0),
      Vectors.dense(4.0, 0.0, 0.0, 6.0, 7.0))

val dataRDD = sc.parallelize(data)

val mat: RowMatrix = new RowMatrix(dataRDD)

// Compute the top 4 singular values and corresponding singular vectors.

val svd: SingularValueDecomposition[RowMatrix, Matrix] = mat.computeSVD(4, computeU = true)

val U: RowMatrix = svd.U  // The U factor is a RowMatrix.

val s: Vector = svd.s  // The singular values are stored in a local dense vector.

val V: Matrix = svd.V  // The V factor is a local dense matrix.

Посоветуйте действенный способ сделать то же самое. Я думал о преобразовании матрицы V в матрицу индексированных строк, но когда я использую итератор строк в V, как мне отслеживать индекс строк? Есть ли лучший способ сделать это?


person ayush gupta    schedule 12.06.2017    source источник
comment
это может быть хорошим подспорьем для вас   -  person Ramesh Maharjan    schedule 12.06.2017