Spec-Zone.ru › OCaml

Модуль Bigarray.Genarray

module Genarray: sig .. end
type (!'a, !'b, !'c) t 

Тип Genarray.t — это тип Bigarray с переменным числом измерений. Поддерживается любое число измерений от 0 до 16.

Три параметра типа Genarray.t определяют тип элементов массива и его размещение следующим образом:

  • первый параметр, 'a, — это тип OCaml для доступа к элементам массива (float, int, int32, int64, nativeint);
  • второй параметр, 'b, — это фактический тип элементов массива (float32_elt, float64_elt, int8_signed_elt, int8_unsigned_elt и т. д.);
  • третий параметр, 'c, определяет размещение массива (c_layout или fortran_layout).

Например, (float, float32_elt, fortran_layout) Genarray.t — это тип обобщённых Bigarray, содержащих 32-разрядные числа с плавающей запятой в размещении Fortran; для чтения и записи в этом массиве используется тип OCaml float.

val create : ('a, 'b) Bigarray.kind ->       'c Bigarray.layout -> int array -> ('a, 'b, 'c) t

Genarray.create kind layout dimensions возвращает новый Bigarray, тип элементов которого определяется параметром kind (одним из float32, float64, int8_signed и т. д.), а размещение — параметром layout (одним из c_layout или fortran_layout). Параметр dimensions — это массив целых чисел, задающих размер Bigarray в каждом измерении. Длина dimensions определяет число измерений Bigarray.

Например, Genarray.create int32 c_layout [|4;6;8|] возвращает новый Bigarray 32-разрядных целых чисел в размещении C с тремя измерениями размером 4, 6 и 8 соответственно.

Bigarray, возвращаемые Genarray.create, не инициализируются: начальные значения элементов массива не определены.

Genarray.create вызывает исключение Invalid_argument, если число измерений не входит в диапазон от 0 до 16 включительно или если одно из измерений отрицательно.

val init : ('a, 'b) Bigarray.kind ->       'c Bigarray.layout ->       int array -> (int array -> 'a) -> ('a, 'b, 'c) t

Genarray.init kind layout dimensions f возвращает новый Bigarray b, тип элементов которого определяется параметром kind (одним из float32, float64, int8_signed и т. д.), а размещение — параметром layout (одним из c_layout или fortran_layout). Параметр dimensions — это массив целых чисел, задающих размер Bigarray в каждом измерении. Длина dimensions определяет число измерений Bigarray.

Каждый элемент Genarray.get b i инициализируется результатом f i. Иными словами, Genarray.init kind layout dimensions f вычисляет результаты применения f к индексам нового Bigarray, размещение которого описывается параметрами kind, layout и dimensions. Массив индексов i может совместно использоваться и изменяться между вызовами f.

Например, Genarray.init int c_layout [|2; 1; 3|]
      (Array.fold_left (+) 0)
возвращает новый Bigarray целых чисел в размещении C с тремя измерениями (2, 1 и 3 соответственно) и значениями элементов 0, 1, 2, 1, 2, 3.

Genarray.init вызывает исключение Invalid_argument, если число измерений не входит в диапазон от 0 до 16 включительно или если одно из измерений отрицательно.

  • Начиная с версии 4.12
val num_dims : ('a, 'b, 'c) t -> int

Возвращает число измерений заданного Bigarray.

val dims : ('a, 'b, 'c) t -> int array

Genarray.dims a возвращает все измерения Bigarray a в виде массива целых чисел длины Genarray.num_dims a.

val nth_dim : ('a, 'b, 'c) t -> int -> int

Genarray.nth_dim a n возвращает n-е измерение Bigarray a. Первое измерение соответствует n = 0; второе измерение соответствует n = 1; последнее измерение — n = Genarray.num_dims a - 1.

  • Вызывает исключение Invalid_argument, если n меньше 0 или больше либо равно Genarray.num_dims a.
val kind : ('a, 'b, 'c) t -> ('a, 'b) Bigarray.kind

Возвращает тип элементов заданного Bigarray.

val layout : ('a, 'b, 'c) t -> 'c Bigarray.layout

Возвращает размещение заданного Bigarray.

val change_layout : ('a, 'b, 'c) t ->       'd Bigarray.layout -> ('a, 'b, 'd) t

Genarray.change_layout a layout возвращает Bigarray с указанным layout, использующий общую область данных с a (и, следовательно, имеющий те же измерения, что и a). Копирование элементов не выполняется: новый и исходный массивы используют одну и ту же область памяти. Измерения переставляются в обратном порядке: get v [| a; b |] в размещении C становится get v [| b+1; a+1 |] в размещении Fortran.

  • Начиная с версии 4.04
val size_in_bytes : ('a, 'b, 'c) t -> int

size_in_bytes a — это число элементов в a, умноженное на размер a в байтах (Bigarray.kind_size_in_bytes).

  • Начиная с версии 4.03
val get : ('a, 'b, 'c) t -> int array -> 'a

Читает элемент обобщённого Bigarray. Genarray.get a [|i1; ...; iN|] возвращает элемент a с координатой i1 в первом измерении, i2 во втором измерении, ..., iN в N-м измерении.

Если a имеет размещение C, координаты должны быть больше или равны 0 и строго меньше соответствующих размеров a. Если a имеет размещение Fortran, координаты должны быть больше или равны 1 и меньше или равны соответствующим размерам a.

Если N > 3, предусмотрен альтернативный синтаксис: можно написать a.{i1, i2, ..., iN} вместо Genarray.get a [|i1; ...; iN|]. (Синтаксис a.{...} с одной, двумя или тремя координатами зарезервирован для доступа к одномерным, двумерным и трёхмерным массивам, как описано ниже.)

  • Вызывает исключение Invalid_argument, если массив a не имеет ровно N измерений или если координаты выходят за границы массива.
val set : ('a, 'b, 'c) t -> int array -> 'a -> unit

Присваивает значение элементу обобщённого Bigarray. Genarray.set a [|i1; ...; iN|] v записывает значение v в элемент a с координатой i1 в первом измерении, i2 во втором измерении, ..., iN в N-м измерении.

Массив a должен иметь ровно N измерений, а все координаты должны находиться в пределах границ массива, как описано для Genarray.get; в противном случае вызывается исключение Invalid_argument.

Если N > 3, предусмотрен альтернативный синтаксис: можно написать a.{i1, i2, ..., iN} <- v вместо Genarray.set a [|i1; ...; iN|] v. (Синтаксис a.{...} <- v с одной, двумя или тремя координатами зарезервирован для изменения одномерных, двумерных и трёхмерных массивов, как описано ниже.)

val sub_left : ('a, 'b, Bigarray.c_layout) t ->       int -> int -> ('a, 'b, Bigarray.c_layout) t

Извлекает подмассив заданного Bigarray, ограничивая первое (самое левое) измерение. Genarray.sub_left a ofs len возвращает Bigarray с тем же числом измерений, что и a, и с теми же размерами, что и a, за исключением первого измерения, которому соответствует интервал [ofs ... ofs + len - 1] первого измерения a. Копирование элементов не выполняется: подмассив и исходный массив используют одну и ту же область памяти. Иными словами, элемент с координатами [|i1; ...; iN|] в подмассиве идентичен элементу с координатами [|i1+ofs; ...; iN|] в исходном массиве a.

Genarray.sub_left применяется только к Bigarray с размещением C.

  • Вызывает исключение Invalid_argument, если ofs и len не задают допустимый подмассив a, то есть если ofs < 0, или len < 0, или ofs + len > Genarray.nth_dim a 0.
val sub_right : ('a, 'b, Bigarray.fortran_layout) t ->       int -> int -> ('a, 'b, Bigarray.fortran_layout) t

Извлекает подмассив заданного Bigarray, ограничивая последнее (самое правое) измерение. Genarray.sub_right a ofs len возвращает Bigarray с тем же числом измерений, что и a, и с теми же размерами, что и a, за исключением последнего измерения, которому соответствует интервал [ofs ... ofs + len - 1] последнего измерения a. Копирование элементов не выполняется: подмассив и исходный массив используют одну и ту же область памяти. Иными словами, элемент с координатами [|i1; ...; iN|] в подмассиве идентичен элементу с координатами [|i1; ...; iN+ofs|] в исходном массиве a.

Genarray.sub_right применяется только к Bigarray с размещением Fortran.

  • Вызывает исключение Invalid_argument, если ofs и len не задают допустимый подмассив a, то есть если ofs < 1, или len < 0, или ofs + len > Genarray.nth_dim a (Genarray.num_dims a - 1).
val slice_left : ('a, 'b, Bigarray.c_layout) t ->       int array -> ('a, 'b, Bigarray.c_layout) t

Извлекает из заданного Bigarray подмассив меньшей размерности, фиксируя одну или несколько первых (самых левых) координат. Genarray.slice_left a [|i1; ... ; iM|] возвращает «срез» a, полученный установкой первых M координат в значения i1, ..., iM. Если a имеет N измерений, срез имеет размерность N - M, а элемент с координатами [|j1; ...; j(N-M)|] в срезе идентичен элементу с координатами [|i1; ...; iM; j1; ...; j(N-M)|] в исходном массиве a. Копирование элементов не выполняется: срез и исходный массив используют одну и ту же область памяти.

Genarray.slice_left применяется только к Bigarray с размещением C.

  • Вызывает исключение Invalid_argument, если M >= N или если [|i1; ... ; iM|] выходит за границы a.
val slice_right : ('a, 'b, Bigarray.fortran_layout) t ->       int array -> ('a, 'b, Bigarray.fortran_layout) t

Извлекает из заданного Bigarray подмассив меньшей размерности, фиксируя одну или несколько последних (самых правых) координат. Genarray.slice_right a [|i1; ... ; iM|] возвращает «срез» a, полученный установкой последних M координат в значения i1, ..., iM. Если a имеет N измерений, срез имеет размерность N - M, а элемент с координатами [|j1; ...; j(N-M)|] в срезе идентичен элементу с координатами [|j1; ...; j(N-M); i1; ...; iM|] в исходном массиве a. Копирование элементов не выполняется: срез и исходный массив используют одну и ту же область памяти.

Genarray.slice_right применяется только к Bigarray с размещением Fortran.

  • Вызывает исключение Invalid_argument, если M >= N или если [|i1; ... ; iM|] выходит за границы a.
val blit : ('a, 'b, 'c) t -> ('a, 'b, 'c) t -> unit

Копирует все элементы одного Bigarray в другой Bigarray. Genarray.blit src dst копирует все элементы src в dst. Массивы src и dst должны иметь одинаковое число измерений и одинаковые размеры. Копирование подмассива src в подмассив dst можно выполнить, применив Genarray.blit к подмассивам или срезам src и dst.

val fill : ('a, 'b, 'c) t -> 'a -> unit

Задаёт всем элементам Bigarray указанное значение. Genarray.fill a v записывает значение v во все элементы Bigarray a. Чтобы задать значение v только некоторым элементам a, можно применить Genarray.fill к подмассиву или срезу a.

© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/api/Bigarray.Genarray.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API