module Array3:sig
..end
三维数组。 Array3
结构提供了类似于 Bigarray.Genarray
的操作,但专门用于三维数组的情况。
type (!'a, !'b, !'c)
t
三维 Bigarray 的类型,其元素的 OCaml 类型为 'a
,表示形式种类为 'b
,内存布局为 'c
。
val create : ('a, 'b) Bigarray.kind ->
'c Bigarray.layout -> int -> int -> int -> ('a, 'b, 'c) t
Array3.create kind layout dim1 dim2 dim3
返回一个新的三维 Bigarray,其大小在第一个维度上为 dim1
,在第二个维度上为 dim2
,在第三个维度上为 dim3
。 kind
和 layout
确定数组元素的种类和数组的布局,如 Bigarray.Genarray.create
中所述。
val init : ('a, 'b) Bigarray.kind ->
'c Bigarray.layout ->
int ->
int -> int -> (int -> int -> int -> 'a) -> ('a, 'b, 'c) t
Array3.init kind layout dim1 dim2 dim3 f
返回一个新的三维 Bigarray b
,其大小在第一个维度上为 dim1
,在第二个维度上为 dim2
,在第三个维度上为 dim3
。 kind
和 layout
确定数组元素的种类和数组的布局,如 Bigarray.Genarray.create
中所述。
数组的每个元素 Array3.get b i j k
都初始化为 f i j k
的结果。
换句话说,Array3.init kind layout dim1 dim2 dim3 f
对一个新 Bigarray 的索引应用函数 f
,并列出其结果,该 Bigarray 的布局由 kind
、layout
、dim1
、dim2
和 dim3
描述。
val dim1 : ('a, 'b, 'c) t -> int
返回给定三维 Bigarray 的第一维。
val dim2 : ('a, 'b, 'c) t -> int
返回给定三维 Bigarray 的第二维。
val dim3 : ('a, 'b, 'c) t -> int
返回给定三维 Bigarray 的第三维。
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
Array3.change_layout a layout
返回一个具有指定 layout
的 Bigarray,与 a
共享数据(因此具有与 a
相同的维度)。不涉及元素复制:新数组和原始数组共享相同的存储空间。维度被反转,使得在 C 布局中 get v [| a; b; c |]
在 Fortran 布局中变为 get v [| c+1; b+1; a+1 |]
。
val size_in_bytes : ('a, 'b, 'c) t -> int
size_in_bytes a
是 a
中元素的数量乘以 a
的 Bigarray.kind_size_in_bytes
。
val get : ('a, 'b, 'c) t -> int -> int -> int -> 'a
Array3.get a x y z
,也写成 a.{x,y,z}
,返回 a
在坐标 (x
, y
, z
) 处的元素。 x
、y
和 z
必须在 a
的范围内,如 Bigarray.Genarray.get
中所述;否则,将引发 Invalid_argument
。
val set : ('a, 'b, 'c) t -> int -> int -> int -> 'a -> unit
Array3.set a x y v
,或者 a.{x,y,z} <- v
,将值 v
存储在 a
中的坐标 (x
, y
, z
) 处。 x
、y
和 z
必须在 a
的范围内,如 Bigarray.Genarray.set
中所述;否则,将引发 Invalid_argument
。
val sub_left : ('a, 'b, Bigarray.c_layout) t ->
int -> int -> ('a, 'b, Bigarray.c_layout) t
通过限制第一维来提取给定三维 Bigarray 的三维子数组。有关更多详细信息,请参阅 Bigarray.Genarray.sub_left
。 Array3.sub_left
仅适用于具有 C 布局的数组。
val sub_right : ('a, 'b, Bigarray.fortran_layout) t ->
int -> int -> ('a, 'b, Bigarray.fortran_layout) t
通过限制第二维来提取给定三维 Bigarray 的三维子数组。有关更多详细信息,请参阅 Bigarray.Genarray.sub_right
。 Array3.sub_right
仅适用于具有 Fortran 布局的数组。
val slice_left_1 : ('a, 'b, Bigarray.c_layout) t ->
int -> int -> ('a, 'b, Bigarray.c_layout) Bigarray.Array1.t
通过固定前两个坐标来提取给定三维 Bigarray 的一维切片。整数参数是要提取的切片的坐标。有关更多详细信息,请参阅 Bigarray.Genarray.slice_left
。 Array3.slice_left_1
仅适用于具有 C 布局的数组。
val slice_right_1 : ('a, 'b, Bigarray.fortran_layout) t ->
int -> int -> ('a, 'b, Bigarray.fortran_layout) Bigarray.Array1.t
通过固定后两个坐标来提取给定三维 Bigarray 的一维切片。整数参数是要提取的切片的坐标。有关更多详细信息,请参阅 Bigarray.Genarray.slice_right
。 Array3.slice_right_1
仅适用于具有 Fortran 布局的数组。
val slice_left_2 : ('a, 'b, Bigarray.c_layout) t ->
int -> ('a, 'b, Bigarray.c_layout) Bigarray.Array2.t
通过固定第一个坐标来提取给定三维 Bigarray 的二维切片。整数参数是要提取的切片的第一个坐标。有关更多详细信息,请参阅 Bigarray.Genarray.slice_left
。 Array3.slice_left_2
仅适用于具有 C 布局的数组。
val slice_right_2 : ('a, 'b, Bigarray.fortran_layout) t ->
int -> ('a, 'b, Bigarray.fortran_layout) Bigarray.Array2.t
通过固定最后一个坐标来提取给定三维 Bigarray 的二维切片。整数参数是要提取的切片的坐标。有关更多详细信息,请参阅 Bigarray.Genarray.slice_right
。 Array3.slice_right_2
仅适用于具有 Fortran 布局的数组。
val blit : ('a, 'b, 'c) t -> ('a, 'b, 'c) t -> unit
将第一个 Bigarray 复制到第二个 Bigarray。有关更多详细信息,请参阅 Bigarray.Genarray.blit
。
val fill : ('a, 'b, 'c) t -> 'a -> unit
用给定值填充给定 Bigarray。有关更多详细信息,请参阅 Bigarray.Genarray.fill
。
val of_array : ('a, 'b) Bigarray.kind ->
'c Bigarray.layout -> 'a array array array -> ('a, 'b, 'c) t
构建一个从给定的数组的数组的数组初始化的三维 Bigarray。
val unsafe_get : ('a, 'b, 'c) t -> int -> int -> int -> 'a
与 Bigarray.Array3.get
相似,但并不总是执行边界检查。
val unsafe_set : ('a, 'b, 'c) t -> int -> int -> int -> 'a -> unit
与 Bigarray.Array3.set
相似,但并不总是执行边界检查。