LMMC
Lamina Mathematic core
载入中...
搜索中...
未找到
sparse_storage.h 文件参考
#include "lmmc/sparse_types.h"
#include "lmmc/dense_types.h"
#include "lmmc/status.h"
sparse_storage.h 的引用(Include)关系图:
此图展示该文件被哪些文件直接或间接地引用了:

浏览该文件的源代码.

函数

lmmc_status_t lmmc_sparse_builder_create (size_t rows, size_t cols, size_t initial_capacity, lmmc_sparse_builder_t **out_builder)
 创建稀疏矩阵增量构造器。
lmmc_status_t lmmc_sparse_builder_add (lmmc_sparse_builder_t *builder, size_t row, size_t col, lmmc_real_t value)
 向构造器追加一项非零元。
lmmc_status_t lmmc_sparse_builder_build (lmmc_sparse_builder_t *builder, lmmc_sparse_format_t format, lmmc_sparse_mat_t *out_sparse)
 将构造器条目转换为指定压缩格式的稀疏矩阵。
void lmmc_sparse_builder_destroy (lmmc_sparse_builder_t *builder)
 销毁稀疏构造器,释放动态数组与句柄。
lmmc_status_t lmmc_sparse_create_csr (size_t rows, size_t cols, size_t nnz, lmmc_sparse_mat_t *out_sparse)
 为指定 nnz 的 CSR 矩阵分配数组。
lmmc_status_t lmmc_sparse_create_csc (size_t rows, size_t cols, size_t nnz, lmmc_sparse_mat_t *out_sparse)
 为指定 nnz 的 CSC 矩阵分配数组。
lmmc_status_t lmmc_sparse_wrap_csr (size_t rows, size_t cols, size_t nnz, size_t *row_ptr, size_t *col_idx, lmmc_real_t *values, lmmc_sparse_mat_t *out_sparse)
 将调用方缓冲区包装为 CSR 视图。
lmmc_status_t lmmc_sparse_wrap_csc (size_t rows, size_t cols, size_t nnz, size_t *col_ptr, size_t *row_idx, lmmc_real_t *values, lmmc_sparse_mat_t *out_sparse)
 将调用方缓冲区包装为 CSC 视图。
void lmmc_sparse_destroy (lmmc_sparse_mat_t *sparse)
 销毁稀疏矩阵,释放其拥有的缓冲区并清零全部字段。
lmmc_status_t lmmc_sparse_from_dense (const lmmc_mat_t *dense, lmmc_real_t eps, lmmc_sparse_mat_t *out_sparse)
 由稠密矩阵生成 CSR,丢弃绝对值 <= eps 的元素。
lmmc_status_t lmmc_sparse_to_dense (const lmmc_sparse_mat_t *sparse, lmmc_mat_t *out_dense)
 将稀疏矩阵展开为稠密矩阵,缺失项填零。
lmmc_status_t lmmc_sparse_transpose (const lmmc_sparse_mat_t *sparse, lmmc_sparse_mat_t *out_transposed)
 计算稀疏矩阵转置,保持原存储格式。
lmmc_status_t lmmc_sparse_to_csc (const lmmc_sparse_mat_t *src, lmmc_sparse_mat_t *dst)
 转换为 CSC,src 已为 CSC 时执行深拷贝。
lmmc_status_t lmmc_sparse_to_csr (const lmmc_sparse_mat_t *src, lmmc_sparse_mat_t *dst)
 转换为 CSR,src 已为 CSR 时执行深拷贝。
lmmc_status_t lmmc_sparse_coo_create (size_t rows, size_t cols, size_t capacity, lmmc_sparse_coo_t *out_coo)
 创建容量为 capacity 的空 COO 矩阵。
lmmc_status_t lmmc_sparse_coo_add_entry (lmmc_sparse_coo_t *coo, size_t row, size_t col, lmmc_real_t value)
 向 COO 追加一项非零元,达到容量时返回错误。
lmmc_status_t lmmc_sparse_coo_to_csr (const lmmc_sparse_coo_t *coo, lmmc_sparse_mat_t *out_csr)
 将 COO 排序为 CSR,重复坐标按插入顺序累加,保留显式零。 要求非零维度、nnz<=capacity、有效条目数组和范围内坐标。 输入保持不变;非法描述符返回 INVALID_ARGUMENT,输出保持不变。
lmmc_status_t lmmc_sparse_coo_to_csc (const lmmc_sparse_coo_t *coo, lmmc_sparse_mat_t *out_csc)
 将 COO 转换为 CSC,校验、稳定合并与显式零语义同 COO→CSR。
void lmmc_sparse_coo_destroy (lmmc_sparse_coo_t *coo)
 销毁 COO 矩阵并释放缓冲区。
lmmc_status_t lmmc_sparse_bsr_create (size_t rows, size_t cols, size_t block_size, size_t nnz_blocks, lmmc_sparse_bsr_t *out)
 创建 BSR 矩阵,数组内容未初始化。
lmmc_status_t lmmc_sparse_bsr_to_dense (const lmmc_sparse_bsr_t *bsr, lmmc_mat_t *out)
 将 BSR 矩阵展开为稠密矩阵。
lmmc_status_t lmmc_sparse_dense_to_bsr (const lmmc_mat_t *dense, size_t block_size, lmmc_real_t eps, lmmc_sparse_bsr_t *out)
 将稠密矩阵转换为 BSR 格式。
void lmmc_sparse_bsr_destroy (lmmc_sparse_bsr_t *bsr)
 销毁 BSR 矩阵,按所有权释放底层缓冲区。
lmmc_status_t lmmc_sparse_sym_csr_from_csr (const lmmc_sparse_mat_t *full, lmmc_sparse_sym_half_t half, lmmc_sparse_sym_csr_t *out)
 从完整 CSR 矩阵提取对称半存储。
void lmmc_sparse_sym_csr_destroy (lmmc_sparse_sym_csr_t *s)
 销毁对称半存储 CSR 矩阵,按所有权释放底层缓冲区。

函数说明

◆ lmmc_sparse_builder_create()

lmmc_status_t lmmc_sparse_builder_create ( size_t rows,
size_t cols,
size_t initial_capacity,
lmmc_sparse_builder_t ** out_builder )

创建稀疏矩阵增量构造器。

支持未知条目数和乱序插入,动态数组容量不足时翻倍扩容。 用 lmmc_sparse_builder_build 生成压缩格式矩阵。

参数
[in]rows矩阵行数,须 > 0。
[in]cols矩阵列数,须 > 0。
[in]initial_capacity初始容量,0 时采用默认值 16。
[out]out_builder输出构造器句柄。
返回
注解
分配堆内存,调用方须用 lmmc_sparse_builder_destroy 释放。

在文件 sparse_builder.c 第 83 行定义.

引用了 lmmc_sparse_builder_t::c_idx, lmmc_sparse_builder_t::capacity, lmmc_sparse_builder_t::cols, lmmc_memory_alloc(), lmmc_memory_free(), LMMC_REAL_INIT, lmmc_sparse_builder_create(), lmmc_sparse_builder_destroy(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_builder_t::nnz, lmmc_sparse_builder_t::r_idx, lmmc_sparse_builder_t::rows , 以及 lmmc_sparse_builder_t::vals.

被这些函数引用 lmmc_sparse_builder_create().

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

◆ lmmc_sparse_builder_add()

lmmc_status_t lmmc_sparse_builder_add ( lmmc_sparse_builder_t * builder,
size_t row,
size_t col,
lmmc_real_t value )

向构造器追加一项非零元。

重复坐标在 build 时累加合并;nnz 递增,容量不足时通过 realloc 翻倍扩容。

参数
[in,out]builder构造器句柄。
[in]row行下标,须 < rows。
[in]col列下标,须 < cols。
[in]value非零元数值。
返回

在文件 sparse_builder.c 第 124 行定义.

引用了 lmmc_sparse_builder_t::c_idx, lmmc_sparse_builder_t::capacity, lmmc_sparse_builder_t::cols, LMMC_REAL_SET, lmmc_sparse_builder_add(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_builder_t::nnz, lmmc_sparse_builder_t::r_idx, lmmc_sparse_builder_t::rows , 以及 lmmc_sparse_builder_t::vals.

被这些函数引用 lmmc_sparse_builder_add().

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

◆ lmmc_sparse_builder_build()

lmmc_status_t lmmc_sparse_builder_build ( lmmc_sparse_builder_t * builder,
lmmc_sparse_format_t format,
lmmc_sparse_mat_t * out_sparse )

将构造器条目转换为指定压缩格式的稀疏矩阵。

按坐标排序,重复 (row,col) 按插入顺序累加,保留相消后的显式零。 每段索引严格递增;构造器保持不变,可继续追加或再次 build。

参数
[in]builder构造器句柄。
[in]format目标格式,CSR 或 CSC。
[out]out_sparse输出稀疏矩阵,调用方须用 lmmc_sparse_destroy 释放。
返回
注解
为输出数组分配堆内存。

在文件 sparse_builder.c 第 162 行定义.

引用了 lmmc_sparse_builder_t::c_idx, lmmc_sparse_builder_t::capacity, lmmc_sparse_coo_t::capacity, lmmc_sparse_coo_t::col_idx, lmmc_sparse_builder_t::cols, lmmc_sparse_coo_t::cols, lmmc_sparse_builder_build(), lmmc_sparse_coo_to_csc(), lmmc_sparse_coo_to_csr(), LMMC_SPARSE_CSC, LMMC_SPARSE_CSR, LMMC_STATUS_INVALID_ARGUMENT, lmmc_sparse_builder_t::nnz, lmmc_sparse_coo_t::nnz, lmmc_sparse_builder_t::r_idx, lmmc_sparse_coo_t::row_idx, lmmc_sparse_builder_t::rows, lmmc_sparse_coo_t::rows, lmmc_sparse_builder_t::vals , 以及 lmmc_sparse_coo_t::values.

被这些函数引用 lmmc_sparse_builder_build().

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

◆ lmmc_sparse_builder_destroy()

void lmmc_sparse_builder_destroy ( lmmc_sparse_builder_t * builder)

销毁稀疏构造器,释放动态数组与句柄。

参数
[in]builder构造器句柄,接受 NULL,销毁后失效。

在文件 sparse_builder.c 第 144 行定义.

引用了 lmmc_sparse_builder_t::c_idx, lmmc_sparse_builder_t::capacity, lmmc_memory_free(), LMMC_REAL_CLEAR, lmmc_sparse_builder_destroy(), lmmc_sparse_builder_t::r_idx , 以及 lmmc_sparse_builder_t::vals.

被这些函数引用 lmmc_sparse_builder_create() , 以及 lmmc_sparse_builder_destroy().

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

◆ lmmc_sparse_create_csr()

lmmc_status_t lmmc_sparse_create_csr ( size_t rows,
size_t cols,
size_t nnz,
lmmc_sparse_mat_t * out_sparse )

为指定 nnz 的 CSR 矩阵分配数组。

owns_data=1,row_ptr 清零,col_idx/values 未初始化。 调用方须填充三个数组,满足 sparse_types.h 中索引严格有序、 坐标唯一的压缩结构契约后使用。

参数
[in]rows行数,须 > 0。
[in]cols列数,须 > 0。
[in]nnz非零元个数,可为 0。
[out]out_sparse输出矩阵,调用方须用 lmmc_sparse_destroy 释放。
返回

在文件 sparse_storage.c 第 14 行定义.

引用了 lmmc_sparse_create_csr() , 以及 LMMC_SPARSE_CSR.

被这些函数引用 lmmc_sparse_coo_to_csr(), lmmc_sparse_create_csr(), lmmc_sparse_from_dense() , 以及 lmmc_sparse_to_csr().

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

◆ lmmc_sparse_create_csc()

lmmc_status_t lmmc_sparse_create_csc ( size_t rows,
size_t cols,
size_t nnz,
lmmc_sparse_mat_t * out_sparse )

为指定 nnz 的 CSC 矩阵分配数组。

初始化、所有权及使用前提同 ::lmmc_sparse_create_csr,format 为 CSC。 row_ptr 表示 col_ptr,col_idx 表示 row_idx。

参数
[in]rows行数,须 > 0。
[in]cols列数,须 > 0。
[in]nnz非零元个数,可为 0。
[out]out_sparse输出矩阵。
返回
同 ::lmmc_sparse_create_csr。

在文件 sparse_storage.c 第 18 行定义.

引用了 lmmc_sparse_create_csc() , 以及 LMMC_SPARSE_CSC.

被这些函数引用 lmmc_sparse_coo_to_csc(), lmmc_sparse_create_csc() , 以及 lmmc_sparse_to_csc().

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

◆ lmmc_sparse_wrap_csr()

lmmc_status_t lmmc_sparse_wrap_csr ( size_t rows,
size_t cols,
size_t nnz,
size_t * row_ptr,
size_t * col_idx,
lmmc_real_t * values,
lmmc_sparse_mat_t * out_sparse )

将调用方缓冲区包装为 CSR 视图。

校验行指针边界、单调性及每行索引范围和严格递增性,拒绝重复或乱序。 输入及其顺序保持不变,失败时 out_sparse 保持不变。 所有权保留给调用方,::lmmc_sparse_destroy 仅销毁视图。 乱序或重复输入应使用 builder/COO。

参数
[in]rows行数。
[in]cols列数。
[in]nnz非零元个数。
[in]row_ptr行指针数组,长度 rows+1,row_ptr[0]==0,row_ptr[rows]==nnz。
[in]col_idx列索引数组,长度 nnz,每行严格递增且各值 < cols。
[in]values数值数组,长度 nnz。
[out]out_sparse输出矩阵视图。
返回
注解
无内存分配,写入视图会直接修改外部缓冲区。

在文件 sparse_storage.c 第 22 行定义.

引用了 lmmc_sparse_mat_t::col_idx, lmmc_sparse_mat_t::cols, lmmc_sparse_mat_t::format, LMMC_SPARSE_CSR, lmmc_sparse_wrap_csr(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_mat_t::nnz, lmmc_sparse_mat_t::owns_data, lmmc_sparse_mat_t::row_ptr, lmmc_sparse_mat_t::rows , 以及 lmmc_sparse_mat_t::values.

被这些函数引用 lmmc_sparse_wrap_csr().

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

◆ lmmc_sparse_wrap_csc()

lmmc_status_t lmmc_sparse_wrap_csc ( size_t rows,
size_t cols,
size_t nnz,
size_t * col_ptr,
size_t * row_idx,
lmmc_real_t * values,
lmmc_sparse_mat_t * out_sparse )

将调用方缓冲区包装为 CSC 视图。

校验、所有权及写入语义同 ::lmmc_sparse_wrap_csr,format 为 CSC。 col_ptr 对应 row_ptr 字段,row_idx 对应 col_idx 字段。

参数
[in]rows行数。
[in]cols列数。
[in]nnz非零元个数。
[in]col_ptr列指针数组,长度 cols+1。
[in]row_idx行索引数组,长度 nnz,每列严格递增且各值 < rows。
[in]values数值数组,长度 nnz。
[out]out_sparse输出矩阵视图。
返回
同 ::lmmc_sparse_wrap_csr。
注解
直接使用外部缓冲区,无内存分配。

在文件 sparse_storage.c 第 56 行定义.

引用了 lmmc_sparse_mat_t::col_idx, lmmc_sparse_mat_t::cols, lmmc_sparse_mat_t::format, LMMC_SPARSE_CSC, lmmc_sparse_wrap_csc(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_mat_t::nnz, lmmc_sparse_mat_t::owns_data, lmmc_sparse_mat_t::row_ptr, lmmc_sparse_mat_t::rows , 以及 lmmc_sparse_mat_t::values.

被这些函数引用 lmmc_sparse_wrap_csc().

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

◆ lmmc_sparse_destroy()

void lmmc_sparse_destroy ( lmmc_sparse_mat_t * sparse)

销毁稀疏矩阵,释放其拥有的缓冲区并清零全部字段。

owns_data 非零时释放 row_ptr、col_idx、values;外部缓冲区保留。 销毁后矩阵须重新初始化才能用于运算。

参数
[in,out]sparse待销毁矩阵,接受 NULL。

在文件 sparse_storage.c 第 90 行定义.

引用了 lmmc_sparse_mat_t::col_idx, lmmc_sparse_mat_t::cols, lmmc_memory_free(), LMMC_REAL_CLEAR, lmmc_sparse_destroy(), lmmc_sparse_mat_t::nnz, lmmc_sparse_mat_t::owns_data, lmmc_sparse_mat_t::row_ptr, lmmc_sparse_mat_t::rows , 以及 lmmc_sparse_mat_t::values.

被这些函数引用 lmmc_sparse_add(), lmmc_sparse_chol_numeric(), lmmc_sparse_chol_symbolic(), lmmc_sparse_destroy(), lmmc_sparse_diag(), lmmc_sparse_lu_numeric(), lmmc_sparse_lu_symbolic(), lmmc_sparse_mat_mat_mul_sparse(), lmmc_sparse_to_csc(), lmmc_sparse_to_csr() , 以及 lmmc_sparse_transpose().

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

◆ lmmc_sparse_from_dense()

lmmc_status_t lmmc_sparse_from_dense ( const lmmc_mat_t * dense,
lmmc_real_t eps,
lmmc_sparse_mat_t * out_sparse )

由稠密矩阵生成 CSR,丢弃绝对值 <= eps 的元素。

参数
[in]dense输入稠密矩阵,保持不变。
[in]eps非负丢弃阈值。
[out]out_sparse输出 CSR,调用方须用 lmmc_sparse_destroy 释放。
返回
注解
两遍扫描分别计数 nnz 和填充新分配的数组。

在文件 sparse_conversion.c 第 13 行定义.

引用了 lmmc_sparse_mat_t::col_idx, lmmc_mat_t::cols, lmmc_mat_t::data, LMMC_REAL_ABS, LMMC_REAL_CLEAR, LMMC_REAL_CMP, LMMC_REAL_INIT, LMMC_REAL_SET, LMMC_REAL_SET_D, lmmc_sparse_create_csr(), lmmc_sparse_from_dense(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_mat_t::row_ptr, lmmc_mat_t::rows, lmmc_mat_t::stride , 以及 lmmc_sparse_mat_t::values.

被这些函数引用 lmmc_sparse_from_dense().

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

◆ lmmc_sparse_to_dense()

lmmc_status_t lmmc_sparse_to_dense ( const lmmc_sparse_mat_t * sparse,
lmmc_mat_t * out_dense )

将稀疏矩阵展开为稠密矩阵,缺失项填零。

参数
[in]sparse输入稀疏矩阵,保持不变。
[out]out_dense已创建且与 sparse 同维的稠密矩阵,内容被完全覆写。
返回
注解
使用输出缓冲区,无内存分配。

在文件 sparse_conversion.c 第 64 行定义.

引用了 lmmc_sparse_mat_t::col_idx, lmmc_mat_t::cols, lmmc_sparse_mat_t::cols, lmmc_mat_t::data, lmmc_sparse_mat_t::format, lmmc_mat_fill(), LMMC_REAL_CLEAR, LMMC_REAL_INIT, LMMC_REAL_SET, LMMC_REAL_SET_D, LMMC_SPARSE_CSR, lmmc_sparse_to_dense(), LMMC_STATUS_DIMENSION_MISMATCH, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_mat_t::row_ptr, lmmc_mat_t::rows, lmmc_sparse_mat_t::rows, lmmc_mat_t::stride , 以及 lmmc_sparse_mat_t::values.

被这些函数引用 lmmc_sparse_to_dense().

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

◆ lmmc_sparse_transpose()

lmmc_status_t lmmc_sparse_transpose ( const lmmc_sparse_mat_t * sparse,
lmmc_sparse_mat_t * out_transposed )

计算稀疏矩阵转置,保持原存储格式。

参数
[in]sparse输入稀疏矩阵,保持不变。
[out]out_transposed输出转置矩阵,调用方须用 lmmc_sparse_destroy 释放。
返回
注解
为输出数组分配堆内存。

在文件 sparse_conversion.c 第 100 行定义.

引用了 lmmc_sparse_mat_t::col_idx, lmmc_sparse_mat_t::cols, lmmc_sparse_mat_t::format, lmmc_memory_alloc_array(), lmmc_memory_free(), LMMC_REAL_SET, LMMC_SPARSE_CSR, lmmc_sparse_destroy(), lmmc_sparse_transpose(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_mat_t::nnz, lmmc_sparse_mat_t::row_ptr, lmmc_sparse_mat_t::rows , 以及 lmmc_sparse_mat_t::values.

被这些函数引用 lmmc_sparse_transpose().

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

◆ lmmc_sparse_to_csc()

lmmc_status_t lmmc_sparse_to_csc ( const lmmc_sparse_mat_t * src,
lmmc_sparse_mat_t * dst )

转换为 CSC,src 已为 CSC 时执行深拷贝。

参数
[in]src输入稀疏矩阵,保持不变。
[out]dst输出 CSC,调用方须用 lmmc_sparse_destroy 释放。
返回
注解
为输出分配堆内存。

在文件 sparse_conversion.c 第 148 行定义.

引用了 lmmc_sparse_mat_t::col_idx, lmmc_sparse_mat_t::cols, lmmc_sparse_mat_t::format, lmmc_memory_alloc_array(), lmmc_memory_free(), LMMC_REAL_SET, lmmc_sparse_create_csc(), LMMC_SPARSE_CSC, lmmc_sparse_destroy(), lmmc_sparse_to_csc(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_mat_t::nnz, lmmc_sparse_mat_t::row_ptr, lmmc_sparse_mat_t::rows , 以及 lmmc_sparse_mat_t::values.

被这些函数引用 lmmc_sparse_direct_csc() , 以及 lmmc_sparse_to_csc().

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

◆ lmmc_sparse_to_csr()

lmmc_status_t lmmc_sparse_to_csr ( const lmmc_sparse_mat_t * src,
lmmc_sparse_mat_t * dst )

转换为 CSR,src 已为 CSR 时执行深拷贝。

参数
[in]src输入稀疏矩阵,保持不变。
[out]dst输出 CSR,调用方须用 lmmc_sparse_destroy 释放。
返回
同 ::lmmc_sparse_to_csc。
注解
为输出分配堆内存。

在文件 sparse_conversion.c 第 203 行定义.

引用了 lmmc_sparse_mat_t::col_idx, lmmc_sparse_mat_t::cols, lmmc_sparse_mat_t::format, lmmc_memory_alloc_array(), lmmc_memory_free(), LMMC_REAL_SET, lmmc_sparse_create_csr(), LMMC_SPARSE_CSR, lmmc_sparse_destroy(), lmmc_sparse_to_csr(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_mat_t::nnz, lmmc_sparse_mat_t::row_ptr, lmmc_sparse_mat_t::rows , 以及 lmmc_sparse_mat_t::values.

被这些函数引用 lmmc_sparse_add(), lmmc_sparse_diag(), lmmc_sparse_mat_mat_mul_sparse() , 以及 lmmc_sparse_to_csr().

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

◆ lmmc_sparse_coo_create()

lmmc_status_t lmmc_sparse_coo_create ( size_t rows,
size_t cols,
size_t capacity,
lmmc_sparse_coo_t * out_coo )

创建容量为 capacity 的空 COO 矩阵。

在文件 sparse_builder.c 第 181 行定义.

引用了 lmmc_sparse_coo_t::capacity, lmmc_sparse_coo_t::col_idx, lmmc_sparse_coo_t::cols, lmmc_memory_alloc(), lmmc_memory_free(), LMMC_REAL_INIT, lmmc_sparse_coo_create(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_coo_t::nnz, lmmc_sparse_coo_t::row_idx, lmmc_sparse_coo_t::rows , 以及 lmmc_sparse_coo_t::values.

被这些函数引用 lmmc_sparse_coo_create().

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

◆ lmmc_sparse_coo_add_entry()

lmmc_status_t lmmc_sparse_coo_add_entry ( lmmc_sparse_coo_t * coo,
size_t row,
size_t col,
lmmc_real_t value )

向 COO 追加一项非零元,达到容量时返回错误。

在文件 sparse_builder.c 第 231 行定义.

引用了 lmmc_sparse_coo_t::capacity, lmmc_sparse_coo_t::col_idx, lmmc_sparse_coo_t::cols, LMMC_REAL_SET, lmmc_sparse_coo_add_entry(), LMMC_STATUS_INDEX_OUT_OF_BOUNDS, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_coo_t::nnz, lmmc_sparse_coo_t::row_idx, lmmc_sparse_coo_t::rows , 以及 lmmc_sparse_coo_t::values.

被这些函数引用 lmmc_sparse_coo_add_entry().

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

◆ lmmc_sparse_coo_to_csr()

lmmc_status_t lmmc_sparse_coo_to_csr ( const lmmc_sparse_coo_t * coo,
lmmc_sparse_mat_t * out_csr )

将 COO 排序为 CSR,重复坐标按插入顺序累加,保留显式零。 要求非零维度、nnz<=capacity、有效条目数组和范围内坐标。 输入保持不变;非法描述符返回 INVALID_ARGUMENT,输出保持不变。

在文件 sparse_conversion.c 第 349 行定义.

引用了 lmmc_coo_sort_entry_t::col, lmmc_sparse_coo_t::col_idx, lmmc_sparse_coo_t::cols, lmmc_memory_alloc_array(), lmmc_memory_free(), LMMC_REAL_CLEAR, LMMC_REAL_INIT, lmmc_sparse_coo_to_csr(), lmmc_sparse_create_csr(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_coo_t::nnz, lmmc_coo_sort_entry_t::orig_idx, lmmc_coo_sort_entry_t::row, lmmc_sparse_coo_t::row_idx, lmmc_sparse_mat_t::row_ptr , 以及 lmmc_sparse_coo_t::rows.

被这些函数引用 lmmc_sparse_builder_build() , 以及 lmmc_sparse_coo_to_csr().

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

◆ lmmc_sparse_coo_to_csc()

lmmc_status_t lmmc_sparse_coo_to_csc ( const lmmc_sparse_coo_t * coo,
lmmc_sparse_mat_t * out_csc )

将 COO 转换为 CSC,校验、稳定合并与显式零语义同 COO→CSR。

在文件 sparse_conversion.c 第 414 行定义.

引用了 lmmc_coo_sort_entry_t::col, lmmc_sparse_coo_t::col_idx, lmmc_sparse_coo_t::cols, lmmc_memory_alloc_array(), lmmc_memory_free(), LMMC_REAL_CLEAR, LMMC_REAL_INIT, lmmc_sparse_coo_to_csc(), lmmc_sparse_create_csc(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_coo_t::nnz, lmmc_coo_sort_entry_t::orig_idx, lmmc_coo_sort_entry_t::row, lmmc_sparse_coo_t::row_idx, lmmc_sparse_mat_t::row_ptr , 以及 lmmc_sparse_coo_t::rows.

被这些函数引用 lmmc_sparse_builder_build() , 以及 lmmc_sparse_coo_to_csc().

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

◆ lmmc_sparse_coo_destroy()

void lmmc_sparse_coo_destroy ( lmmc_sparse_coo_t * coo)

销毁 COO 矩阵并释放缓冲区。

在文件 sparse_conversion.c 第 478 行定义.

引用了 lmmc_sparse_coo_t::capacity, lmmc_sparse_coo_t::col_idx, lmmc_sparse_coo_t::cols, lmmc_memory_free(), LMMC_REAL_CLEAR, lmmc_sparse_coo_destroy(), lmmc_sparse_coo_t::nnz, lmmc_sparse_coo_t::row_idx, lmmc_sparse_coo_t::rows , 以及 lmmc_sparse_coo_t::values.

被这些函数引用 lmmc_sparse_coo_destroy().

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

◆ lmmc_sparse_bsr_create()

lmmc_status_t lmmc_sparse_bsr_create ( size_t rows,
size_t cols,
size_t block_size,
size_t nnz_blocks,
lmmc_sparse_bsr_t * out )

创建 BSR 矩阵,数组内容未初始化。

参数
[in]rows块行数。
[in]cols块列数。
[in]block_size块维度 r,每块为 rxr。
[in]nnz_blocks非零块数量。
[out]out输出 BSR 矩阵。

在文件 sparse_block.c 第 12 行定义.

引用了 lmmc_sparse_bsr_t::block_size, lmmc_sparse_bsr_t::col_idx, lmmc_sparse_bsr_t::cols, lmmc_memory_alloc(), lmmc_memory_free(), lmmc_sparse_bsr_create(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_bsr_t::nnz_blocks, lmmc_sparse_bsr_t::owns_data, lmmc_sparse_bsr_t::row_ptr, lmmc_sparse_bsr_t::rows , 以及 lmmc_sparse_bsr_t::values.

被这些函数引用 lmmc_sparse_bsr_create() , 以及 lmmc_sparse_dense_to_bsr().

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

◆ lmmc_sparse_bsr_to_dense()

lmmc_status_t lmmc_sparse_bsr_to_dense ( const lmmc_sparse_bsr_t * bsr,
lmmc_mat_t * out )

将 BSR 矩阵展开为稠密矩阵。

参数
[in]bsr输入 BSR 矩阵。
[out]out已创建的稠密矩阵,维度须为 (rows*block_size) x (cols*block_size)。

在文件 sparse_block.c 第 153 行定义.

引用了 lmmc_sparse_bsr_t::block_size, lmmc_sparse_bsr_t::col_idx, lmmc_mat_t::cols, lmmc_sparse_bsr_t::cols, lmmc_mat_t::data, lmmc_mat_fill(), LMMC_REAL_CLEAR, LMMC_REAL_INIT, LMMC_REAL_SET_D, lmmc_sparse_bsr_to_dense(), LMMC_STATUS_DIMENSION_MISMATCH, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_bsr_t::nnz_blocks, lmmc_sparse_bsr_t::row_ptr, lmmc_mat_t::rows, lmmc_sparse_bsr_t::rows , 以及 lmmc_sparse_bsr_t::values.

被这些函数引用 lmmc_sparse_bsr_to_dense().

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

◆ lmmc_sparse_dense_to_bsr()

lmmc_status_t lmmc_sparse_dense_to_bsr ( const lmmc_mat_t * dense,
size_t block_size,
lmmc_real_t eps,
lmmc_sparse_bsr_t * out )

将稠密矩阵转换为 BSR 格式。

丢弃块内全部元素绝对值均 <= eps 的块。

参数
[in]dense输入稠密矩阵,各维度须为 block_size 的整数倍。
[in]block_size块维度 r。
[in]eps丢弃阈值。
[out]out输出 BSR 矩阵。

在文件 sparse_block.c 第 192 行定义.

引用了 lmmc_mat_t::cols, lmmc_mat_t::data, LMMC_REAL_CLEAR, LMMC_REAL_CMP, LMMC_REAL_INIT, LMMC_REAL_SET_D, lmmc_sparse_bsr_create(), lmmc_sparse_dense_to_bsr(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK , 以及 lmmc_mat_t::rows.

被这些函数引用 lmmc_sparse_dense_to_bsr().

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

◆ lmmc_sparse_bsr_destroy()

void lmmc_sparse_bsr_destroy ( lmmc_sparse_bsr_t * bsr)

销毁 BSR 矩阵,按所有权释放底层缓冲区。

在文件 sparse_block.c 第 255 行定义.

引用了 lmmc_sparse_bsr_t::block_size, lmmc_sparse_bsr_t::col_idx, lmmc_sparse_bsr_t::cols, lmmc_memory_free(), lmmc_sparse_bsr_destroy(), lmmc_sparse_bsr_t::nnz_blocks, lmmc_sparse_bsr_t::owns_data, lmmc_sparse_bsr_t::row_ptr, lmmc_sparse_bsr_t::rows , 以及 lmmc_sparse_bsr_t::values.

被这些函数引用 lmmc_sparse_bsr_destroy().

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

◆ lmmc_sparse_sym_csr_from_csr()

lmmc_status_t lmmc_sparse_sym_csr_from_csr ( const lmmc_sparse_mat_t * full,
lmmc_sparse_sym_half_t half,
lmmc_sparse_sym_csr_t * out )

从完整 CSR 矩阵提取对称半存储。

参数
[in]full输入完整 CSR 方阵。
[in]half选择上三角或下三角。
[out]out输出对称半存储 CSR 矩阵。

在文件 sparse_symmetric.c 第 89 行定义.

引用了 lmmc_sparse_sym_csr_t::col_idx, lmmc_sparse_mat_t::cols, lmmc_sparse_mat_t::format, lmmc_sparse_sym_csr_t::half, lmmc_memory_alloc(), lmmc_memory_free(), LMMC_SPARSE_CSR, lmmc_sparse_sym_csr_from_csr(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_sym_csr_t::n, lmmc_sparse_sym_csr_t::nnz, lmmc_sparse_sym_csr_t::owns_data, lmmc_sparse_sym_csr_t::row_ptr, lmmc_sparse_mat_t::rows , 以及 lmmc_sparse_sym_csr_t::values.

被这些函数引用 lmmc_sparse_sym_csr_from_csr().

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

◆ lmmc_sparse_sym_csr_destroy()

void lmmc_sparse_sym_csr_destroy ( lmmc_sparse_sym_csr_t * s)

销毁对称半存储 CSR 矩阵,按所有权释放底层缓冲区。

在文件 sparse_symmetric.c 第 211 行定义.

引用了 lmmc_sparse_sym_csr_t::col_idx, lmmc_memory_free(), lmmc_sparse_sym_csr_destroy(), lmmc_sparse_sym_csr_t::n, lmmc_sparse_sym_csr_t::nnz, lmmc_sparse_sym_csr_t::owns_data, lmmc_sparse_sym_csr_t::row_ptr , 以及 lmmc_sparse_sym_csr_t::values.

被这些函数引用 lmmc_sparse_sym_csr_destroy().

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