我什么时候需要使用Bigarray?为什么?

时间:2009-11-02 12:37:31

标签: arrays ocaml

关于Bigarray模块的文档有些模糊。它声明该模块中数组的目的是保存“大型数组”,但它并没有真正定义“大型数组”的含义。什么时候我应该在常规阵列上使用Bigarray?是否有一定数量的元素,我应该使用Bigarray?它是成千上万?百万?十亿?

是什么让Bigarray更好地处理大数组?什么使常规数组更好地处理...非大数组?

1 个答案:

答案 0 :(得分:10)

我找到了答案(来自this page):

bigarray库实现了大型,多维的数值数组。这些数组称为“大数组”,以区别于模块阵列中描述的标准Caml数组。 “大阵列”和标准Caml阵列之间的主要区别如下:

  • 大数组的大小不受限制,与Caml数组不同(浮点数组在32位平台上限制为2097151个元素,其他数组类型限制为4194303个元素)。
  • 大阵列是多维的。支持1到16之间的任意数量的维度。相比之下,Caml阵列是单维的,需要将多维数组编码为数组阵列。
  • 大数组只能包含整数和浮点数,而Caml数组可以包含任意Caml数据类型。但是,大数组提供更节省空间的整数和浮点元素存储,特别是因为它们支持“小”类型,如单精度浮点数和8位和16位整数,此外还有标准的Caml类型的double -precision浮点数和32位和64位整数。
  • 大数组的内存布局与C和Fortran中的数组完全兼容,允许大型数组在Caml代码和C / Fortran代码之间来回传递,完全没有数据复制。
  • 大数组支持普通数组无法有效提供的有趣的高级操作,例如提取子数组和沿某些维度“切片”多维数组,所有操作都没有任何复制。