为什么Breeze使用Array来表示矩阵?

时间:2016-09-13 14:04:18

标签: scala immutability scala-breeze

DenseMatrix类具有Array [V]类型的参数数据。为什么不使用一些可以动态增长的其他可变集合,例如Vector?

1 个答案:

答案 0 :(得分:3)

评论(来自Raphael Roth和Jasper-M)都提出了很好的观点,他们都是原因之一。 Breeze使用netlib-java通过JNI处理其与本机BLAS的接口,并使用数组。 (它本来可以用Java Buffers来实现,但它们没有。)动态调整DenseMatrices的大小并没有多大意义,DM和DV的实现是故意相似的。

Arrays还具有比Java和Scala中任何其他内置集合更好的性能特征,并且由于Breeze关注快速,因此它是最佳选择。 scala和java box原始元素中的所有泛型集合,这在性能敏感的环境中是完全不可接受的。 (我可以使用Scala专门编写我自己的专用ArrayBuffer,但我没有。)此外,java Vector同步所有访问,因此除非你真的需要锁定,否则它是特别不可接受的。

如果您不确定数据集的维度,可以使用VectorBuilder(它具有可设置的长度参数,可以设置为-1以关闭边界检查)。