通常(到目前为止总是)我尝试在斯卡拉使用一成不变的收集,尤其是这样,如果我给一个集合的引用,以我的程序的其他部分我不能覆盖意外的原始来源。 使用微风,我想知道:为什么决定有DenseVector是一个可变的集合?
这只是一个(也许不需要)边在后台使用数组的效果呢? 如果是这样,为什么这些阵列中使用,而不是另一个(immutable)的集合?
通常(到目前为止总是)我尝试在斯卡拉使用一成不变的收集,尤其是这样,如果我给一个集合的引用,以我的程序的其他部分我不能覆盖意外的原始来源。 使用微风,我想知道:为什么决定有DenseVector是一个可变的集合?
这只是一个(也许不需要)边在后台使用数组的效果呢? 如果是这样,为什么这些阵列中使用,而不是另一个(immutable)的集合?
性能。
微风使用netlib中的Java为核心的线性代数例程。 这包括所有的立方时间运算,矩阵矩阵和矩阵-向量乘法。 特别努力采取措施,确保该数组不会被复制。
甲DenseVector
比阵列的任何其他支持的会是慢得多。 它可以换一个ImmutableArray
它包装的Array
,但是这将迫使一些操作可以通过就地复制为避免拷贝,可能与专业化等古怪互动
我不知道这是多么重要(我怀疑不是很多),但对于未来的人从数值计算(而不是从斯卡拉)可变性微风预期。 例如,它可以更容易端口,其在Matlab或R中实施以微风的算法。
性能。 虽然函数式编程提供了极好的抽象和紧凑的代码,它往往不提供最快的执行。 Java数组提供远低于开销比Scala集合,因此是去到了高重复性的数字运算。 微风DenseVector
s为以相同的方式,并通过在引擎盖下的java阵列的支持。