为什么DenseVector可变集合?(Why is DenseVector a mutable c

2019-09-28 20:40发布

通常(到目前为止总是)我尝试在斯卡拉使用一成不变的收集,尤其是这样,如果我给一个集合的引用,以我的程序的其他部分我不能覆盖意外的原始来源。 使用微风,我想知道:为什么决定有DenseVector是一个可变的集合?

这只是一个(也许不需要)边在后台使用数组的效果呢? 如果是这样,为什么这些阵列中使用,而不是另一个(immutable)的集合?

Answer 1:

  1. 性能。

    微风使用netlib中的Java为核心的线性代数例程。 这包括所有的立方时间运算,矩阵矩阵和矩阵-向量乘法。 特别努力采取措施,确保该数组不会被复制。

    DenseVector比阵列的任何其他支持的会是慢得多。 它可以换一个ImmutableArray它包装的Array ,但是这将迫使一些操作可以通过就地复制为避免拷贝,可能与专业化等古怪互动

  2. 我不知道这是多么重要(我怀疑不是很多),但对于未来的人从数值计算(而不是从斯卡拉)可变性微风预期。 例如,它可以更容易端口,其在Matlab或R中实施以微风的算法。



Answer 2:

性能。 虽然函数式编程提供了极好的抽象和紧凑的代码,它往往不提供最快的执行。 Java数组提供远低于开销比Scala集合,因此是去到了高重复性的数字运算。 微风DenseVector s为以相同的方式,并通过在引擎盖下的java阵列的支持。



文章来源: Why is DenseVector a mutable collection?