2

スカララでスパース ベクトルをスライスして、別のスパース ベクトルを取得したいと思います。通常のスライスは常に標準ベクトルを提供します。スライス中にこれを行うための暗黙的な関数を提供できますか?もしそうなら、それはどのようになりますか?

例として、次のことを実現したいと考えています。

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

最後に、私は Scalala リリース 1.0.0.RC3-SNAPSHOT を使用しています。

前もって感謝します。

4

1 に答える 1

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 ソースを調べてみることができます。

于 2012-05-07T12:13:57.243 に答える