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
會將 f
應用於新 Bigarray 的索引的結果製成表格,該 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
,但並非總是執行邊界檢查。