Когда мне нужно использовать Bigarray и почему? - PullRequest
8 голосов
/ 02 ноября 2009

Документация по модулю Bigarray несколько расплывчата. В нем говорится, что целью массивов в этом модуле является удержание «больших массивов», но в действительности это не определяет, что означает «большой массив». Когда я должен использовать Bigarray поверх обычного массива? Есть ли определенное количество элементов, за которыми я должен просто использовать Bigarray? Это тысячами? Миллионы? Миллиарды?

А что делает Bigarray лучше при работе с большими массивами? Что делает обычный массив лучше при работе с ... не большими массивами?

1 Ответ

10 голосов
/ 02 ноября 2009

Я нашел ответ на этот вопрос (с этой страницы ):

В библиотеке bigarray реализованы большие многомерные числовые массивы. Эти массивы называются «большими массивами», чтобы отличать их от стандартных массивов Caml, описанных в модульном массиве. Основные различия между «большими массивами» и стандартными массивами Caml заключаются в следующем:

  • Большие массивы не ограничены по размеру, в отличие от массивов Caml (массив float ограничен 2097151 элементами на 32-битной платформе, другие типы массивов - 4194303 элементами).
  • Большие массивы многомерны. Поддерживается любое количество измерений от 1 до 16. Напротив, массивы Caml являются одномерными и требуют кодирования многомерных массивов в виде массивов массивов.
  • Большие массивы могут содержать только целые числа и числа с плавающей точкой, в то время как массивы Caml могут содержать произвольные типы данных Caml. Однако большие массивы обеспечивают более эффективное хранение пространства целочисленных элементов и элементов с плавающей запятой, в частности, потому что они поддерживают «малые» типы, такие как числа с плавающей запятой одинарной точности и 8- и 16-разрядные целые числа, в дополнение к стандартным типам Caml типа double. -прецизионные числа с плавающей запятой и 32- и 64-разрядные целые числа.
  • Макет памяти больших массивов полностью совместим с макетом массивов в C и Fortran, что позволяет передавать большие массивы между кодом Caml и кодом C / Fortran и обратно без копирования данных вообще.
  • Большие массивы поддерживают интересные высокоуровневые операции, которые обычные массивы не обеспечивают эффективно, такие как извлечение подмассивов и «разрезание» многомерного массива по определенным измерениям, все без какого-либо копирования.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...