Модуль 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|] возвращает новый Bigarray целых чисел в формате C с тремя измерениями (2, 1, 3 соответственно), с значениями элементов 0, 1, 2, 1, 2, 3.
(Array.fold_left (+) 0)
Genarray.init вызывает исключение Invalid_argument, если число измерений не находится в диапазоне от 0 до 16 включительно или если одно из измерений отрицательно.
- Since 4.12.0
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.
-
Raises
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.
- Since 4.04.0
val size_in_bytes : ('a, 'b, 'c) t -> int
size_in_bytes a — это количество элементов в a, умноженное на Bigarray.kind_size_in_bytes из a.
- Since 4.03.0
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.{...} с одной, двумя или тремя координатами предназначен для доступа к одномерным, двумерным и трехмерным массивам, как описано ниже.)
-
Raises
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.
-
Raises
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.
-
Raises
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.
-
Raises
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.
-
Raises
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. Установка только некоторых элементов a в значение v можно осуществить, применив Genarray.fill к подмассиву или срезу a.
© 1995-2022 INRIA.
https://v2.ocaml.org/releases/5.0/htmlman/libref/Bigarray.Genarray.html