切片SparseVector以获取Scalala中的SparseVector

时间:2012-05-07 03:11:29

标签: scala scalala

我想在scalala中切片稀疏矢量并获得另一个稀疏矢量。正常切片总是给出标准向量。我可以在切片时提供隐式函数来执行此操作吗?如果是这样,它会是什么样的?

举个例子,我想完成以下任务:

val v:SparseVectorRow[Double] = ...
val v2:SparseVectorRow[Double] = v(List(1,3,5))

最后,我正在使用Scalala 1.0.0版.RC3-SNAPSHOT。

提前致谢。

1 个答案:

答案 0 :(得分:1)

是的,您可以自己定义适当的参数化CanSliceVector。以下内容不是通用的或必然有效,但它有效:

import scalala.generic.collection.CanSliceVector

implicit object svrSlicer extends
  CanSliceVector[SparseVectorRow[Double], Int, SparseVectorRow[Double]] {
  def apply(from: SparseVectorRow[Double], keys: Seq[Int]) =
    SparseVector.create(from.size)(keys.map(k => (k, from(k))): _*).t
}

val v: SparseVectorRow[Double] = SparseVector.create(10)((0, 1.0), (3, 2.0)).t
val v2: SparseVectorRow[Double] = v(List(1, 3, 5))

您可以在Scalala源代码中找到解决方法,以找出“正确”的方法。