如何从 Scala 密集向量中提取两个数组

How to extract two arrays from a Scala dense vector

我有一个密集向量。

scala> model.coefficients 
res1: org.apache.spark.ml.linalg.Vector = (891,[11,20,25,27,28,50],[0.35686135501086036,8.194306936725383E-6,7.62720047518819E-6,9.354557510460644E-4,5.633054601656321E-4,2.5641516558812987E-5])

有人可以建议一种用这个向量创建两个数组的方法吗?

数组 1:索引数组

res2: Array[Int] = Array(11,20,25,27,28,50)  

数组 2:值数组

res3: Array[Double] = Array(0.35686135501086036,8.194306936725383E-6,7.62720047518819E-6,9.354557510460644E-4,5.633054601656321E-4,2.5641516558812987E-5)

非常感谢您的帮助:

(我的最终目标是使用索引数组获取模型系数和 select 列名。例如:数组索引 11 可能是产品 A 的销售额,数组索引 20 可能是客户年龄等等等等)

我相信你拥有的是一个 SparseVector。您可以使用方法 indices and values 如下:

import org.apache.spark.mllib.linalg.SparseVector

val vector = new SparseVector(891, Array(11, 20, 25, 27, 28, 50), Array(
  0.35686135501086036, 8.194306936725383E-6, 7.62720047518819E-6,
  9.354557510460644E-4, 5.633054601656321E-4, 2.5641516558812987E-5)
)

vector.indices
// res1: Array[Int] = Array(11, 20, 25, 27, 28, 50)

vector.values
// res2: Array[Double] = Array(0.35686135501086036, 8.194306936725383E-6, 7.62720047518819E-6,
//   9.354557510460644E-4, 5.633054601656321E-4, 2.5641516558812987E-5)