概述
csc_matrix稀疏矩阵
- 描述
- 参考源
- 稀疏矩阵的常规方式
- csc_matrix
- csr_matrix
描述
Apollo轨迹规划中,横向轨迹优化使用的OSQP的二次规划求解器,其中通过调用csc_matrix()进行构建矩阵,即稀疏矩阵。
度娘:在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。
参考源
大神们的解释,丰富而精彩:
scipy csr_matrix和csc_matrix函数详解
csc_matrix、coo_matrix
稀疏矩阵的常规方式
下面是最常见的一种,也很好理解,(row,col)指向矩阵非零元素的索引,data里为该元素的值。
>>> row = array([0,2,2,0,1,2])
>>> col = array([0,0,1,2,2,2])
>>> data = array([1,2,3,4,5,6])
>>> csc_matrix( (data,(row,col)), shape=(3,3) ).todense()
matrix([[1, 0, 4],
[0, 0, 5],
[2, 3, 6]])
即 row[i], col[i]存储的数据为data[i]。
从row和col的值,可以看到非零元素值出现的位置为(0,0),(2,0) ,(2,1) ,(0,2),(1,2),(2,2),依次填入data值即可。
csc_matrix
按列压缩CSC—Compressed sparse column
顾名思义将每一列出现的非零元素的个数统计后放好…
>>> indptr = np.array([0, 2, 3, 6])
>>> indices = np.array([0, 2, 2, 0, 1, 2])
>>> data = np.array([1, 2, 3, 4, 5, 6])
>>> csc_matrix((data, indices, indptr), shape=(3, 3)).toarray()
array([[1, 0, 4],
[0, 0, 5],
[2, 3, 6]])
这个是大家分享用到的示例,比较正规的描述:
indptr表示的是indices矩阵里的开始和结尾的index, indptr [0, 2]表示indices[0:2]存储了第一列的数据所位置0行和2行,indices[2:3]存储了第二列的数据位置,即2,第2行(注意从0行开始), 每个indices[i]对应一个data[i]。
链接:https://www.jianshu.com/p/6248d3a307a1
比较快速的理解就是:indptr[i+1]
表示稀疏矩阵的第i列(包括i列)之前一共有多少个非零元素,这些非零元素对应的行,依次在indices
中取出来即可。
第0列的非零元素个数为indptr[0+1]-indptr[0]
=2-0=2个,从indices
中可知对应的非零元素在0、2行,data
对应的值为1、2,则第0列为{1 0 2};
第1列的非零元素个数为indptr[1+1]-indptr[1]
=3-2=1个,从indices
中可知对应的非零元素在2行,data
对应的值为3,则第1列为{0 0 3};
第2列的非零元素个数为indptr[2+1]-indptr[2]
=6-3=3个,从indices
中可知对应的非零元素在0、1、2行,data
对应的值为4、5、6,则第2列为{4 5 6};
得到完整的矩阵。
csr_matrix
按行压缩CSR—Compressed sparse row
原理和CSC类似。
最后
以上就是缓慢电脑为你收集整理的csc_matrix稀疏矩阵理解的全部内容,希望文章能够帮你解决csc_matrix稀疏矩阵理解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复