Wann muss ich ein Bigarray benutzen und warum?

8

Die Dokumentation zum Bigararray-Modul ist etwas vage. Es besagt, dass der Zweck von Arrays in diesem Modul darin besteht, "große Arrays" aufzunehmen, aber es definiert nicht wirklich, was es unter "großes Array" bedeutet. Wann sollte ich ein Bigarray über ein normales Array verwenden? Gibt es eine bestimmte Anzahl von Elementen, über die ich nur ein Bigarray verwenden sollte? Ist es in den Tausenden? Millionen? Milliarden?

Und was macht einen Bigarray im Umgang mit großen Arrays besser? Was macht ein reguläres Array besser im Umgang mit ... nicht großen Arrays?

    
Jason Baker 02.11.2009, 12:37
quelle

1 Antwort

10

Ich habe die Antwort gefunden (von diese Seite ):

Die Bigarray-Bibliothek implementiert große, mehrdimensionale numerische Arrays. Diese Arrays werden als "große Arrays" bezeichnet, um sie von den in Array Array beschriebenen Standard-Caml-Arrays zu unterscheiden. Die Hauptunterschiede zwischen "großen Arrays" und Standard-Caml-Arrays sind wie folgt:

  • Große Arrays sind nicht in der Größe begrenzt, im Gegensatz zu Caml-Arrays (Float-Array sind auf 2097151 Elemente auf einer 32-Bit-Plattform beschränkt, andere Array-Typen auf 4194303-Elemente).
  • Große Arrays sind mehrdimensional. Eine beliebige Anzahl von Dimensionen zwischen 1 und 16 wird unterstützt. Im Gegensatz dazu sind Caml-Arrays eindimensional und erfordern die Codierung mehrdimensionaler Arrays als Arrays von Arrays.
  • Große Arrays können nur Ganzzahlen und Gleitkommazahlen enthalten, während Caml-Arrays beliebige Caml-Datentypen enthalten können. Große Arrays bieten jedoch eine platzsparende Speicherung von Integer- und Gleitkomma-Elementen, insbesondere weil sie neben den Standard-Caml-Double-Typen auch "kleine" Typen wie Gleitkommazahlen einfacher Genauigkeit und 8- und 16-Bit-Ganzzahlen unterstützen -Pozision floats und 32 und 64-Bit-Ganzzahlen.
  • Das Speicherlayout großer Arrays ist vollständig mit dem von Arrays in C und Fortran kompatibel, so dass große Arrays zwischen Caml-Code und C / Fortran-Code hin und her übertragen werden können, ohne dass Daten kopiert werden.
  • Große Arrays unterstützen interessante High-Level-Operationen, die normale Arrays nicht effizient bereitstellen, wie das Extrahieren von Sub-Arrays und das "Schneiden" eines mehrdimensionalen Arrays entlang bestimmter Dimensionen, ohne Kopieren.
Jason Baker 02.11.2009, 13:23
quelle

Tags und Links