【问题标题】:scala - convert mahout vector to arrayscala - 将 mahout 向量转换为数组
【发布时间】:2014-06-13 07:39:19
【问题描述】:

我正在使用 mahout 数学向量 (org.apache.mahout.math.Vector) 并希望将其转换为数组。

查看documentation,我没有找到要转换的函数。

转换它的最简单方法是什么(使用 scala)?

【问题讨论】:

    标签: java arrays scala vector mahout


    【解决方案1】:

    您可以使用 JavaConverters(我没有 mahout,因此代码中可能存在小错误):

    val javaIterable = mahoutVector.all()
    import scala.collection.JavaConverters.iterableAsScalaIterableConverter
    val scalaIterable = javaIterable.asScala
    val scalaArray = scalaIterable.toArray
    

    scalaArray 现在包含 Vector.Element 对象。如果您想拥有双精度值,则必须映射元素(使用 .get()):

    [same first three lines as above]
    val scalaArray = scalaIterable.map(_.get()).toArray
    

    【讨论】:

    • @webSpider 为什么你使用 var 而不是 val? :-)
    • 一种叫做不变性的东西,你知道的 :)
    • 在 Scala(和其他函数式编程语言)中,不变性优于可变性。这有一些优点,例如您可以更好地推断程序中发生的事情,并简化并发编程。
    • 视情况而定。有时有必要使用可变性,但应该尽量减少它。网络上有很多关于该主题的文章,我建议阅读其中的一些。
    【解决方案2】:

    最新的 Mahout 主版本具有功能非常齐全的 Scala API 和线性代数 DSL。新代码是用 Scala 编写的,并针对 Spark。事实上,Hadoop mapreduce 没有新的贡献被接受,只有 Spark。

    此处描述了 Scala 和 Spark 绑定:http://mahout.apache.org/users/sparkbindings/ScalaSparkBindings.pdf

    甚至还有一个 Scala Shell,您可以在其中交互式地试验大量 Mahout 核心代码。

    鉴于在 Scala 中操作向量和矩阵的新方法,您可能不需要数组。

    【讨论】:

      猜你喜欢
      • 2014-05-13
      • 2023-04-02
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多