我是靠谱客的博主 缓慢电脑,最近开发中收集的这篇文章主要介绍csc_matrix稀疏矩阵理解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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稀疏矩阵理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部