В приведенном ниже коде я получаю плотную матрицу V после выполнения SVD. Я хочу
- Учитывая набор значений (скажем, 3,7,9).
- Я хочу извлечь 3,7 и 9-ю строку Matrix V.
- Я хочу вычислить косинусное сходство этих трех строк с каждой строкой матрицы V.
- Мне нужно добавить три сходства косинуса, полученные для каждой строки.
- Наконец, мне нужен индекс строки с максимальной суммой.
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, как мне отслеживать индекс строк? Есть ли лучший способ сделать это?