通常、Scalaでは不変なコレクションを使用しようとしています。特に、コレクションの参照をプログラムの他の部分に渡すと、元のソースを偶然上書きすることができなくなります。 breezeを使用して、私は知りたい:DenseVectorを変更可能なコレクションにすることが決定したのはなぜですか?DenseVectorはなぜ可変コレクションですか?
これはバックグラウンドでの配列の使用の副作用ですか?その場合、別の(不変の)コレクションではなく、なぜArrayが使われたのですか?
通常、Scalaでは不変なコレクションを使用しようとしています。特に、コレクションの参照をプログラムの他の部分に渡すと、元のソースを偶然上書きすることができなくなります。 breezeを使用して、私は知りたい:DenseVectorを変更可能なコレクションにすることが決定したのはなぜですか?DenseVectorはなぜ可変コレクションですか?
これはバックグラウンドでの配列の使用の副作用ですか?その場合、別の(不変の)コレクションではなく、なぜArrayが使われたのですか?
パフォーマンス。アレイは、実質的に遅くなることになる以外に支え
DenseVector
。それはArray
ラップImmutableArray
をラップすることができ、これはその場でコピーすることによってコピーを避けることができ、いくつかの操作を強制するだろう、多分など、専門と不気味対話
私はこれがいかに重要であるかを知りません(私はそれほどのものではないと思う)が、(Scalaではなく)数値計算からBreezeに来る人にとって、変更可能性が期待されます。例えば。 MatlabまたはRで実装されているアルゴリズムをBreezeに移植する方が簡単です。
パフォーマンス。関数型プログラミングは優れた抽象化と厳密なコードを提供しますが、最も速い実行を提供することはしばしばありません。 Java配列は、Scalaコレクションよりもはるかに少ないオーバーヘッドを提供するため、非常に反復的な数値演算のための必要があります。 Breeze DenseVector
は同じ方法で、フードの下にあるJava配列によってサポートされています。
2.私は右半分のようです: 'a = c(1,2);を実行します。 b = a; Rのa [1] = 0はaであり、aは0 2 3であり、bは1 2 3である。 Scalaの等価は、不変の 'var'です。 – Make42
DenseVectorが不変の場合、 'a = a(1):= 0'と書く必要があります。 – Make42
はい、Breezeはこの点でRやMatlab(IIRC)ではなくNumpyのように振る舞います。 R/Matlabユーザーも同様です。再び、私はこれが弱い理由であると思う(もしあれば)。 –