|
LMMC
Lamina Mathematic core
|
稀疏矩阵存储生命周期:创建、外部数据包装与销毁。 更多...
#include <string.h>#include "memory_bridge.h"#include "internal.h"#include "sparse_internal.h"#include "lmmc/config.h"#include "lmmc/sparse.h"函数 | |
| 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) |
| 销毁稀疏矩阵,释放其拥有的缓冲区并清零全部字段。 | |
稀疏矩阵存储生命周期:创建、外部数据包装与销毁。
在文件 sparse_storage.c 中定义.
| 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_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 | 输出矩阵。 |
在文件 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_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_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 | 输出矩阵视图。 |
在文件 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().
| 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().