|
LMMC
Lamina Mathematic core
|
三阶稠密张量数据结构、运算与视图。 更多...
结构体 | |
| struct | lmmc_tensor3_t |
| 三阶张量结构。 更多... | |
函数 | |
| lmmc_status_t | lmmc_tensor3_create (size_t dim0, size_t dim1, size_t dim2, lmmc_tensor3_t *out_tensor) |
创建 dim0 x dim1 x dim2 的张量,元素未初始化。 | |
| lmmc_status_t | lmmc_tensor3_wrap (size_t dim0, size_t dim1, size_t dim2, size_t stride0, size_t stride1, size_t stride2, lmmc_real_t *data, lmmc_tensor3_t *out_tensor) |
| 用外部缓冲区构造张量视图。 | |
| void | lmmc_tensor3_destroy (lmmc_tensor3_t *tensor) |
| 销毁张量。 | |
| lmmc_status_t | lmmc_tensor3_fill (lmmc_tensor3_t *tensor, lmmc_real_t value) |
用 value 填充张量所有元素。 | |
| lmmc_status_t | lmmc_tensor3_set (lmmc_tensor3_t *tensor, size_t i, size_t j, size_t k, lmmc_real_t value) |
| 写入元素 (i,j,k)。 | |
| lmmc_status_t | lmmc_tensor3_get (const lmmc_tensor3_t *tensor, size_t i, size_t j, size_t k, lmmc_real_t *out_value) |
| 读取元素 (i,j,k)。 | |
| lmmc_status_t | lmmc_tensor3_norm_fro (const lmmc_tensor3_t *tensor, lmmc_real_t *out_norm) |
| 用缩放平方和计算张量 Frobenius 范数。 | |
| lmmc_status_t | lmmc_tensor3_add (const lmmc_tensor3_t *a, const lmmc_tensor3_t *b, lmmc_tensor3_t *out_tensor) |
| 同形状张量逐元素加法。 | |
| lmmc_status_t | lmmc_tensor3_sub (const lmmc_tensor3_t *a, const lmmc_tensor3_t *b, lmmc_tensor3_t *out_tensor) |
| 同形状张量逐元素减法。 | |
| lmmc_status_t | lmmc_tensor3_mul (const lmmc_tensor3_t *a, const lmmc_tensor3_t *b, lmmc_tensor3_t *out_tensor) |
| 同形状张量逐元素乘法(Hadamard)。 | |
| lmmc_status_t | lmmc_tensor3_div (const lmmc_tensor3_t *a, const lmmc_tensor3_t *b, lmmc_tensor3_t *out_tensor) |
同形状张量逐元素除法,b 中元素须非零。 | |
| lmmc_status_t | lmmc_tensor3_scale (const lmmc_tensor3_t *tensor, lmmc_real_t alpha, lmmc_tensor3_t *out_tensor) |
标量乘:out = alpha * tensor。 | |
| lmmc_status_t | lmmc_tensor3_sum (const lmmc_tensor3_t *tensor, lmmc_real_t *out_sum) |
| 累加全部元素。 | |
| lmmc_status_t | lmmc_tensor3_max (const lmmc_tensor3_t *tensor, lmmc_real_t *out_max) |
| 求最大元素。 | |
| lmmc_status_t | lmmc_tensor3_min (const lmmc_tensor3_t *tensor, lmmc_real_t *out_min) |
| 求最小元素。 | |
| lmmc_status_t | lmmc_tensor3_sum_axis (const lmmc_tensor3_t *tensor, size_t axis, lmmc_mat_t *out_matrix) |
| 沿指定轴求和,结果为二维矩阵。 | |
| lmmc_status_t | lmmc_tensor3_reshape_view (const lmmc_tensor3_t *tensor, size_t new_dim0, size_t new_dim1, size_t new_dim2, lmmc_tensor3_t *out_view) |
| 在元素总数与连续布局兼容时,构造共享缓冲区的重塑视图。 | |
| lmmc_status_t | lmmc_tensor3_slice_view (const lmmc_tensor3_t *tensor, size_t begin0, size_t end0, size_t begin1, size_t end1, size_t begin2, size_t end2, lmmc_tensor3_t *out_view) |
| 取张量子区间视图,每维使用半开区间 [begin, end)。 | |
三阶稠密张量数据结构、运算与视图。
在文件 tensor3.h 中定义.
| struct lmmc_tensor3_t |
三阶张量结构。
通过 lmmc_tensor3_reshape_view / lmmc_tensor3_slice_view 得到的 视图共享底层缓冲区且 owns_data == 0。
| 成员变量 | ||
|---|---|---|
| size_t | dim0 |
第 0 维大小。 |
| size_t | dim1 |
第 1 维大小。 |
| size_t | dim2 |
第 2 维大小。 |
| size_t | stride0 |
第 0 维步距。 |
| size_t | stride1 |
第 1 维步距。 |
| size_t | stride2 |
第 2 维步距。 |
| lmmc_real_t * | data |
数据缓冲区。 |
| int | owns_data |
缓冲区所有权标志。 |
| lmmc_status_t lmmc_tensor3_create | ( | size_t | dim0, |
| size_t | dim1, | ||
| size_t | dim2, | ||
| lmmc_tensor3_t * | out_tensor ) |
创建 dim0 x dim1 x dim2 的张量,元素未初始化。
在文件 tensor3_storage.c 第 9 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor_nd_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, lmmc_tensor_nd_t::dims, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_tensor3_create(), lmmc_tensor_nd_create(), lmmc_tensor3_t::owns_data, lmmc_tensor_nd_t::owns_data, lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1, lmmc_tensor3_t::stride2 , 以及 lmmc_tensor_nd_t::strides.
被这些函数引用 lmmc_tensor3_create().
| lmmc_status_t lmmc_tensor3_wrap | ( | size_t | dim0, |
| size_t | dim1, | ||
| size_t | dim2, | ||
| size_t | stride0, | ||
| size_t | stride1, | ||
| size_t | stride2, | ||
| lmmc_real_t * | data, | ||
| lmmc_tensor3_t * | out_tensor ) |
用外部缓冲区构造张量视图。
在文件 tensor3_storage.c 第 37 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_tensor3_wrap(), lmmc_tensor3_t::owns_data, lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_wrap().
| void lmmc_tensor3_destroy | ( | lmmc_tensor3_t * | tensor | ) |
销毁张量。
在文件 tensor3_storage.c 第 72 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, lmmc_memory_free(), LMMC_REAL_CLEAR, lmmc_tensor3_destroy(), lmmc_tensor3_t::owns_data, lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_destroy().
| lmmc_status_t lmmc_tensor3_fill | ( | lmmc_tensor3_t * | tensor, |
| lmmc_real_t | value ) |
用 value 填充张量所有元素。
在文件 tensor3_ops.c 第 7 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, LMMC_REAL_SET, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_tensor3_fill(), lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_fill().
| lmmc_status_t lmmc_tensor3_set | ( | lmmc_tensor3_t * | tensor, |
| size_t | i, | ||
| size_t | j, | ||
| size_t | k, | ||
| lmmc_real_t | value ) |
写入元素 (i,j,k)。
在文件 tensor3_storage.c 第 97 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, LMMC_REAL_SET, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_tensor3_set(), lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_set().
| lmmc_status_t lmmc_tensor3_get | ( | const lmmc_tensor3_t * | tensor, |
| size_t | i, | ||
| size_t | j, | ||
| size_t | k, | ||
| lmmc_real_t * | out_value ) |
读取元素 (i,j,k)。
在文件 tensor3_storage.c 第 113 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, LMMC_REAL_SET, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_tensor3_get(), lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_get().
| lmmc_status_t lmmc_tensor3_norm_fro | ( | const lmmc_tensor3_t * | tensor, |
| lmmc_real_t * | out_norm ) |
用缩放平方和计算张量 Frobenius 范数。
在文件 tensor3_ops.c 第 24 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_tensor3_norm_fro(), lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_norm_fro().
| lmmc_status_t lmmc_tensor3_add | ( | const lmmc_tensor3_t * | a, |
| const lmmc_tensor3_t * | b, | ||
| lmmc_tensor3_t * | out_tensor ) |
同形状张量逐元素加法。
在文件 tensor3_ops.c 第 47 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, LMMC_REAL_ADD, LMMC_REAL_CLEAR, LMMC_REAL_INIT, LMMC_REAL_SET, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, lmmc_tensor3_add(), lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_add().
| lmmc_status_t lmmc_tensor3_sub | ( | const lmmc_tensor3_t * | a, |
| const lmmc_tensor3_t * | b, | ||
| lmmc_tensor3_t * | out_tensor ) |
同形状张量逐元素减法。
在文件 tensor3_ops.c 第 80 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, LMMC_REAL_CLEAR, LMMC_REAL_INIT, LMMC_REAL_SET, LMMC_REAL_SUB, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, lmmc_tensor3_sub(), lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_sub().
| lmmc_status_t lmmc_tensor3_mul | ( | const lmmc_tensor3_t * | a, |
| const lmmc_tensor3_t * | b, | ||
| lmmc_tensor3_t * | out_tensor ) |
同形状张量逐元素乘法(Hadamard)。
在文件 tensor3_ops.c 第 113 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, LMMC_REAL_CLEAR, LMMC_REAL_INIT, LMMC_REAL_MUL, LMMC_REAL_SET, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, lmmc_tensor3_mul(), lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_mul().
| lmmc_status_t lmmc_tensor3_div | ( | const lmmc_tensor3_t * | a, |
| const lmmc_tensor3_t * | b, | ||
| lmmc_tensor3_t * | out_tensor ) |
同形状张量逐元素除法,b 中元素须非零。
在文件 tensor3_ops.c 第 146 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, LMMC_REAL_CLEAR, LMMC_REAL_CMP, LMMC_REAL_DIV, LMMC_REAL_INIT, LMMC_REAL_SET, LMMC_REAL_SET_D, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, lmmc_tensor3_div(), lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_div().
| lmmc_status_t lmmc_tensor3_scale | ( | const lmmc_tensor3_t * | tensor, |
| lmmc_real_t | alpha, | ||
| lmmc_tensor3_t * | out_tensor ) |
标量乘:out = alpha * tensor。
在文件 tensor3_ops.c 第 185 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, LMMC_REAL_CLEAR, LMMC_REAL_INIT, LMMC_REAL_MUL, LMMC_REAL_SET, LMMC_STATUS_DIMENSION_MISMATCH, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, lmmc_tensor3_scale(), lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_scale().
| lmmc_status_t lmmc_tensor3_sum | ( | const lmmc_tensor3_t * | tensor, |
| lmmc_real_t * | out_sum ) |
累加全部元素。
在文件 tensor3_ops.c 第 223 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, LMMC_REAL_ADD, LMMC_REAL_CLEAR, LMMC_REAL_INIT, LMMC_REAL_SET, LMMC_REAL_SET_D, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, lmmc_tensor3_sum(), lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_sum().
| lmmc_status_t lmmc_tensor3_max | ( | const lmmc_tensor3_t * | tensor, |
| lmmc_real_t * | out_max ) |
求最大元素。
在文件 tensor3_ops.c 第 260 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, LMMC_REAL_CLEAR, LMMC_REAL_CMP, LMMC_REAL_INIT, LMMC_REAL_SET, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, lmmc_tensor3_max(), lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_max().
| lmmc_status_t lmmc_tensor3_min | ( | const lmmc_tensor3_t * | tensor, |
| lmmc_real_t * | out_min ) |
求最小元素。
在文件 tensor3_ops.c 第 293 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, LMMC_REAL_CLEAR, LMMC_REAL_CMP, LMMC_REAL_INIT, LMMC_REAL_SET, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, lmmc_tensor3_min(), lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_min().
| lmmc_status_t lmmc_tensor3_sum_axis | ( | const lmmc_tensor3_t * | tensor, |
| size_t | axis, | ||
| lmmc_mat_t * | out_matrix ) |
沿指定轴求和,结果为二维矩阵。
| [in] | tensor | 输入张量。 |
| [in] | axis | 归约轴,取值 0、1 或 2。 |
| [out] | out_matrix | 输出矩阵,形状由其余两维决定。 |
在文件 tensor3_ops.c 第 361 行定义.
引用了 lmmc_mat_t::cols, lmmc_mat_t::data, lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, LMMC_REAL_CLEAR, LMMC_REAL_INIT, LMMC_REAL_SET, LMMC_STATUS_OK, lmmc_tensor3_sum_axis(), lmmc_mat_t::rows, lmmc_mat_t::stride, lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_sum_axis().
| lmmc_status_t lmmc_tensor3_reshape_view | ( | const lmmc_tensor3_t * | tensor, |
| size_t | new_dim0, | ||
| size_t | new_dim1, | ||
| size_t | new_dim2, | ||
| lmmc_tensor3_t * | out_view ) |
在元素总数与连续布局兼容时,构造共享缓冲区的重塑视图。
非拥有型视图支持原地重塑;拥有数据的 tensor 须使用独立的 out_view。 元素总数溢出返回 ::LMMC_STATUS_INVALID_ARGUMENT; 可表示但不相等的元素总数返回 ::LMMC_STATUS_DIMENSION_MISMATCH。
在文件 tensor3_views.c 第 21 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor_nd_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, lmmc_tensor_nd_t::dims, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_tensor3_reshape_view(), lmmc_tensor_nd_reshape_view(), lmmc_tensor_nd_t::ndim, lmmc_tensor3_t::owns_data, lmmc_tensor_nd_t::owns_data, lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1, lmmc_tensor3_t::stride2 , 以及 lmmc_tensor_nd_t::strides.
被这些函数引用 lmmc_tensor3_reshape_view().
| lmmc_status_t lmmc_tensor3_slice_view | ( | const lmmc_tensor3_t * | tensor, |
| size_t | begin0, | ||
| size_t | end0, | ||
| size_t | begin1, | ||
| size_t | end1, | ||
| size_t | begin2, | ||
| size_t | end2, | ||
| lmmc_tensor3_t * | out_view ) |
取张量子区间视图,每维使用半开区间 [begin, end)。
在文件 tensor3_views.c 第 91 行定义.
引用了 lmmc_tensor3_t::data, lmmc_tensor3_t::dim0, lmmc_tensor3_t::dim1, lmmc_tensor3_t::dim2, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_tensor3_slice_view(), lmmc_tensor3_t::owns_data, lmmc_tensor3_t::stride0, lmmc_tensor3_t::stride1 , 以及 lmmc_tensor3_t::stride2.
被这些函数引用 lmmc_tensor3_slice_view().