val dimensionality = 10
val zeros = DenseVector.zeros[Double](dimensionality)
@tailrec private def specials(list: List[DenseVector[Int]], i: Int): List[DenseVector[Int]] = {
if(i >= dimensionality) list
else {
val vec = zeros.copy
vec(i to i) := 1
specials(vec :: list, i + 1)
}
}
val specialList = specials(Nil, 0).toVector
specialList.map(...doing my thing...)
は、私は上記のアキュムレータとしてリストを使用して、私の末尾再帰関数を記述し、その後List + .toVectorまたはVectorでのテール再帰?
specials(Nil, 0).toVector
書いたり、私が最初の場所でのベクトルと私のトレイル再帰を書くべきでしょうか?計算上より効率的なものは何ですか?
ところで:specialListは、1つのエントリを除いてすべてのエントリが0であるDenseVectorsを含むリストです。長いものと同じ数のDenseVectorsがあります。
質問が更新されました。何が起きているのかが明確になるはずです。 – Make42