LMMC
Lamina Mathematic core
载入中...
搜索中...
未找到
tensor3.h 文件参考

三阶稠密张量数据结构、运算与视图。 更多...

#include <stddef.h>
#include "lmmc/dense.h"
#include "lmmc/status.h"
tensor3.h 的引用(Include)关系图:
此图展示该文件被哪些文件直接或间接地引用了:

浏览该文件的源代码.

结构体

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 中定义.


结构体说明

◆ lmmc_tensor3_t

struct lmmc_tensor3_t

三阶张量结构。

通过 lmmc_tensor3_reshape_view / lmmc_tensor3_slice_view 得到的 视图共享底层缓冲区且 owns_data == 0。

在文件 tensor3.h 第 22 行定义.

lmmc_tensor3_t 的协作图:
成员变量
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_tensor3_create()

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_tensor3_wrap()

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().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_tensor3_destroy()

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_tensor3_fill()

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_tensor3_set()

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_tensor3_get()

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_tensor3_norm_fro()

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_tensor3_add()

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_tensor3_sub()

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_tensor3_mul()

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_tensor3_div()

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_tensor3_scale()

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_tensor3_sum()

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_tensor3_max()

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_tensor3_min()

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_tensor3_sum_axis()

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_tensor3_reshape_view()

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_tensor3_slice_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().

函数调用图:
这是这个函数的调用关系图: