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—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[i+1]
表示稀疏矩陣的第i列(包括i列)之前一共有多少個非零元素,這些非零元素對應的行,依次在indices
中取出來即可。
第0列的非零元素個數為indptr[0+1]-indptr[0]
=2-0=2個,從indices
中可知對應的非零元素在0、2行,data
對應的值為1、2,則第0列為;
第1列的非零元素個數為indptr[1+1]-indptr[1]
=3-2=1個,從indices
中可知對應的非零元素在2行,data
對應的值為3,則第1列為;
第2列的非零元素個數為indptr[2+1]-indptr[2]
=6-3=3個,從indices
中可知對應的非零元素在0、1、2行,data
對應的值為4、5、6,則第2列為;
得到完整的矩陣。
按行壓縮csr—compressed sparse row
原理和csc類似。
特殊矩陣 稀疏矩陣
對於乙個m n的矩陣,設s為矩陣的元素總個數s m n,設t為矩陣中非零元素的個數,滿足t 稀疏矩陣的零元素非常多,且分布無規律,所以稀疏矩陣的壓縮儲存方法為 只儲存矩陣中的非零元素,按照三元組的形式儲存。三元組由非零元素,該元素行下標和該元素列下標三個資料構成,放在乙個列數為3的陣列中。儲存結構又...
稀疏陣列,稀疏矩陣概念
稀疏矩陣 矩陣中非零元素的個數遠遠小於矩陣元素的總數,並且非零元素的分布沒有規律,通常認為矩陣中非零元素的總數比上矩陣所有元素總數的值小於等於0.05時,則稱該矩陣為稀疏矩陣 sparse matrix 該比值稱為這個矩陣的稠密度。稀疏陣列 稀疏陣列可以看做是普通陣列的壓縮,但是這裡說的普通陣列是值...
稀疏矩陣運算
行邏輯鏈結的三元組順序表實現,加減乘和轉置運算,調的好累,這兩天少了點勁頭了,堅持住,試了好幾組資料應該沒問題了,但也可能還有漏洞 include include include using namespace std define ok 1 define error 0 define overfl...