我想在scalala中切片一个稀疏向量并得到另一个稀疏向量。 普通切片总是给出一个标准向量。 我可以提供一个隐式函数来在切片时执行此操作吗?如果是这样,它会是什么样子?
例如,我想完成以下操作:
val v:SparseVectorRow[Double] = ...
val v2:SparseVectorRow[Double] = v(List(1,3,5))
最后,我使用的是Scalala版本1.0.0.RC3-SNAPSHOT。
提前谢谢。
是的,您可以定义自己的适当参数化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 源代码中四处寻找"正确"的方法。