---
title: 数据存储
description: "提供KML_SPBLAS库函数的数据存储格式说明。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/240RC2/accel/kunpengaccel_kml_16_0070.html
sourcePath: /source/zh/kunpengboostkithistory/240RC2/accel/kunpengaccel_kml_16_0070.html
indexId: 535582c986a53ed6cbf494909291dbed62d294d31dc01f4a5140b71f8357535a76
---
# 数据存储

提供KML_SPBLAS库函数的数据存储格式说明。

#### 稀疏向量压缩存储格式

仅存储稀疏矩阵中的非零元素。假设有稀疏矩阵a，a中有nz个非零元素：a(k1), a(k2), ..., a(knz)。

存储时，用两个数组来存储矩阵a的信息：

x(1)=a(k1), x(2)=a(k2), ..., x(nz)=a(knz)

indx(1)=k1, indx(2)=k2, ..., indx(nz)=knz

压缩存储格式可以节省计算机内存和运行时间。


#### 向量全存储格式

存储稀疏矩阵中所有的元素。


#### 稀疏矩阵存储格式

CSR（Compressed Sparse Row，行序稀疏矩阵压缩）格式包含四项要素：值（value）、列（column）、索引B（pointerB）和索引E（pointerE）。

表1描述了稀疏矩阵A中四项要素的含义。


**表1 CSR稀疏矩阵A中四项要素说明**

| 参数名 | 描述 |
| --- | --- |
| 值（value） | A矩阵中的非零元素，存储方式为行主序。 数组长度与A中非零元素个数相等。 |
| 列（column） | value数组中第i个元素value[i]在矩阵A中的列序号。 数组长度与A中非零元素个数相等。 |
| 索引B（pointerB） | 在基1索引中，pointerB(j)\-pointerB(1)+1表示A矩阵第j行第一个非零元素在value数组中的索引。 在基0索引中，pointerB(j)\-pointerB(0)表示A矩阵第j行第一个非零元素在value数组中的索引。 数组长度与A的行数相等。 |
| 索引E（pointerE） | 在基1索引中，pointerE(j)\-pointerB(1)表示A矩阵第j行最后一个非零元素在value数组中的索引。 在基0索引中，pointerE(j)\-pointerB(0)\-1表示A矩阵第j行最后一个非零元素在value数组中的索引。 数组长度与A的行数相等。 |


假设矩阵A为：，则A的CSR格式如表2所示。


**表2 矩阵A的CSR格式**

| 矩阵 | 索引方式 | CSR格式 |
| --- | --- | --- |
|  | 基1索引 | value = [2, \-3, 7, 1, \-6, 8, \-4, 5, 9] column = [1, 2, 4, 3, 4, 1, 3, 4, 1] pointerB = [1, 4, 6, 9] pointerE = [4, 6, 9, 10] |
| 基0索引 | value = [2, \-3, 7, 1, \-6, 8, \-4, 5, 9] column = [0, 1, 3, 2, 3, 0, 2, 3, 0] pointerB = [0, 3, 5, 8] pointerE = [3, 5, 8, 9] |  |


CSC（Compressed Sparse Column，列序稀疏矩阵压缩）格式包含四项要素：值（value）、列（column）、索引B（pointerB）和索引E（pointerE）。

表3描述了稀疏矩阵A中四项要素的含义。


**表3 CSC格式稀疏矩阵A中四项要素说明**

| 参数名 | 描述 |
| --- | --- |
| 值（value） | A矩阵中的非零元素，存储方式为列主序。 数组长度与A中非零元素个数相等。 |
| 列（column） | value数组中第i个元素value[i]在矩阵A中的行序号。 数组长度与A中非零元素个数相等。 |
| 索引B（pointerB） | 在基1索引中，pointerB(j)\-pointerB(1)+1表示A矩阵第j列第一个非零元素在value数组中的索引。 在基0索引中，pointerB(j)\-pointerB(0)表示A矩阵第j列第一个非零元素在value数组中的索引。 数组长度与A的列数相等。 |
| 索引E（pointerE） | 在基1索引中，pointerE(j)\-pointerB(1)表示A矩阵第j列最后一个非零元素在value数组中的索引。 在基0索引中，pointerE(j)\-pointerB(0)\-1表示A矩阵第j列最后一个非零元素在value数组中的索引。 数组长度与A的列数相等。 |


假设矩阵A为：，则A的CSC格式如表4所示。


**表4 矩阵A的CSC格式**

| 矩阵 | 索引方式 | CSC格式 |
| --- | --- | --- |
|  | 基1索引 | value = [2, 8, 9, \-3, 1, \-4, 7, \-6, 5] column = [1, 3, 4, 1, 2, 3, 1, 2, 3] pointerB = [1, 4, 5, 7] pointerE = [4, 5, 7, 10] |
| 基0索引 | value = [2, 8, 9, \-3, 1, \-4, 7, \-6, 5] column = [0, 2, 3, 0, 1, 2, 0, 1, 2] pointerB = [0, 3, 4, 6] pointerE = [3, 4, 6, 9] |  |
