LMMC
Lamina Mathematic core
载入中...
搜索中...
未找到
tensor3.h
浏览该文件的文档.
1
5#ifndef LMMC_TENSOR3_H
6#define LMMC_TENSOR3_H
7
8#include <stddef.h>
9#include "lmmc/dense.h"
10#include "lmmc/status.h"
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
22typedef struct {
23 size_t dim0;
24 size_t dim1;
25 size_t dim2;
26 size_t stride0;
27 size_t stride1;
28 size_t stride2;
32
34lmmc_status_t lmmc_tensor3_create(size_t dim0, size_t dim1, size_t dim2, lmmc_tensor3_t* out_tensor);
35
38 size_t dim0,
39 size_t dim1,
40 size_t dim2,
41 size_t stride0,
42 size_t stride1,
43 size_t stride2,
44 lmmc_real_t* data,
45 lmmc_tensor3_t* out_tensor
46);
47
50
53
55lmmc_status_t lmmc_tensor3_set(lmmc_tensor3_t* tensor, size_t i, size_t j, size_t k, lmmc_real_t value);
56
58lmmc_status_t lmmc_tensor3_get(const lmmc_tensor3_t* tensor, size_t i, size_t j, size_t k, lmmc_real_t* out_value);
59
62
73
80
88lmmc_status_t lmmc_tensor3_sum_axis(const lmmc_tensor3_t* tensor, size_t axis, lmmc_mat_t* out_matrix);
89
98 const lmmc_tensor3_t* tensor,
99 size_t new_dim0,
100 size_t new_dim1,
101 size_t new_dim2,
102 lmmc_tensor3_t* out_view
103);
104
107 const lmmc_tensor3_t* tensor,
108 size_t begin0,
109 size_t end0,
110 size_t begin1,
111 size_t end1,
112 size_t begin2,
113 size_t end2,
114 lmmc_tensor3_t* out_view
115);
116
117#ifdef __cplusplus
118}
119#endif
120
121#endif
double lmmc_real_t
Public and internal LMMC real type.
行优先存储的稠密矩阵。
LMMC 通用状态码定义.
lmmc_status_t
LMMC 库统一返回的状态码.
lmmc_status_t lmmc_tensor3_sum(const lmmc_tensor3_t *tensor, lmmc_real_t *out_sum)
累加全部元素。
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_sum_axis(const lmmc_tensor3_t *tensor, size_t axis, lmmc_mat_t *out_matrix)
沿指定轴求和,结果为二维矩阵。
lmmc_status_t lmmc_tensor3_min(const lmmc_tensor3_t *tensor, lmmc_real_t *out_min)
求最小元素。
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_get(const lmmc_tensor3_t *tensor, size_t i, size_t j, size_t k, lmmc_real_t *out_value)
读取元素 (i,j,k)。
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_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_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)。
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)
用外部缓冲区构造张量视图。
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_sub(const lmmc_tensor3_t *a, const lmmc_tensor3_t *b, lmmc_tensor3_t *out_tensor)
同形状张量逐元素减法。
lmmc_status_t lmmc_tensor3_max(const lmmc_tensor3_t *tensor, lmmc_real_t *out_max)
求最大元素。
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_mul(const lmmc_tensor3_t *a, const lmmc_tensor3_t *b, lmmc_tensor3_t *out_tensor)
同形状张量逐元素乘法(Hadamard)。
lmmc_real_t * data
lmmc_status_t lmmc_tensor3_norm_fro(const lmmc_tensor3_t *tensor, lmmc_real_t *out_norm)
用缩放平方和计算张量 Frobenius 范数。
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)
在元素总数与连续布局兼容时,构造共享缓冲区的重塑视图。
三阶张量结构。