網站首頁 編程語言 正文
1. coo存儲方式
采用三元組(row, col, data)(或稱為ijv format)的形式來存儲矩陣中非零元素的信息。
coo_matrix的優點:有利于稀疏格式之間的快速轉換(tobsr()、tocsr()、to_csc()、to_dia()、to_dok()、to_lil();允許重復項(格式轉換的時候自動相加);能與CSR / CSC格式的快速轉換
coo_matrix的缺點:不能直接進行算術運算,包括賦值
初始化方式:
coo_matrix(D), D代表密集矩陣
賦值:
>>> import numpy as np
>>> from scipy.sparse import coo_matrix
>>> _row = np.array([0, 3, 1, 0])
>>> _col = np.array([0, 3, 1, 2])
>>> _data = np.array([4, 5, 7, 9])
>>> coo = coo_matrix((_data, (_row, _col)), shape=(4, 4), dtype=np.int)
>>> coo.todense() # 通過toarray方法轉化成密集矩陣(numpy.matrix)
>>> coo.toarray() # 通過toarray方法轉化成密集矩陣(numpy.ndarray)
array([[4, 0, 9, 0],
[0, 7, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 5]])
2. dok_matrix
? dok_matrix,即Dictionary Of Keys based sparse matrix,是一種類似于coo matrix但又基于字典的稀疏矩陣存儲方式,key由非零元素的的坐標值tuple(row, column)組成,value則代表數據值。dok matrix非常適合于增量構建稀疏矩陣,并一旦構建,就可以快速地轉換為coo_matrix。
>>> import numpy as np
>>> from scipy.sparse import dok_matrix
>>> np.random.seed(10)
>>> matrix = random(3, 3, format='dok', density=0.4)
>>> matrix[1, 1] = 33
>>> matrix[2, 1] = 10
>>> matrix.toarray()
array([[ 0. , 0. , 0. ],
[ 0. , 33. , 0. ],
[ 0.19806286, 10. , 0.22479665]])
>>> dict(matrix)
{(2, 0): 0.19806286475962398, (2, 1): 10.0, (2, 2): 0.22479664553084766, (1, 1): 33.0}
>>> isinstance(matrix, dict)
True
3. csr和csc存儲方式
csr_matrix,全稱Compressed Sparse Row matrix,即按行壓縮的稀疏矩陣存儲方式,由三個一維數組indptr, indices, data組成。這種格式要求矩陣元「按行順序存儲」,「每一行中的元素可以亂序存儲」。那么對于每一行就只需要用一個指針表示該行元素的起始位置即可。indptr存儲每一行數據元素的起始位置,indices這是存儲每行中數據的列號,與data中的元素一一對應。
csr_matrix,是按列壓縮,不再贅述
csr_matrix的優點:
高效的算術運算CSR + CSR,CSR * CSR等
高效的行切片
快速矩陣運算
csr_matrix的缺點:
列切片操作比較慢(考慮csc_matrix)
稀疏結構的轉換比較慢(考慮lil_matrix或doc_matrix)
>>> import numpy as np
>>> from scipy.sparse import csr_matrix
>>> 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])
>>> csr = csr_matrix((data, indices, indptr), shape=(3, 3)).toarray()
array([[1, 0, 2],
[0, 0, 3],
[4, 5, 6]])
4. lil_matrix
lil_matrix,即List of Lists format,又稱為Row-based linked list sparse matrix。它使用兩個嵌套列表存儲稀疏矩陣:data保存每行中的非零元素的值,rows保存每行非零元素所在的列號(列號是順序排序的)。
LIL matrix本身的設計是用來方便快捷構建稀疏矩陣實例,而算術運算、矩陣運算則轉化成CSC、CSR格式再進行,構建大型的稀疏矩陣還是推薦使用COO格式。
5. dia_matrix
? dia_matrix,全稱Sparse matrix with DIAgonal storage,是一種對角線的存儲方式。如下圖中,將稀疏矩陣使用offsets和data兩個矩陣來表示。
>>> data = np.arange(15).reshape(3, -1) + 1
>>> offsets = np.array([0, -3, 2])
>>> dia = sparse.dia_matrix((data, offsets), shape=(7, 5))
>>> dia.toarray()
array([[ 1, 0, 13, 0, 0],
[ 0, 2, 0, 14, 0],
[ 0, 0, 3, 0, 15],
[ 6, 0, 0, 4, 0],
[ 0, 7, 0, 0, 5],
[ 0, 0, 8, 0, 0],
[ 0, 0, 0, 9, 0]])
6. 稀疏矩陣經驗
要有效地構造矩陣,請使用dok_matrix或lil_matrix
lil_matrix類支持基本切片和花式索引,其語法與NumPy Array類似;lil_matrix形式是基于row的,因此能夠很高效的轉為csr,但是轉為csc效率相對較低。
要執行乘法或轉置等操作,首先將矩陣轉換為CSC或CSR格式,效率高
CSR格式特別適用于快速矩陣矢量產品
CSR,CSC和COO格式之間的所有轉換都是線性復雜度。
原文鏈接:https://blog.csdn.net/kittyzc/article/details/126077002
相關推薦
- 2022-11-19 如何解決error: failed to push some refs to 'xxx(遠程庫)'
- 2023-01-11 C++入門教程之引用與指針_C 語言
- 2022-03-16 VS2022?安裝.NET4.5目標包的方法_實用技巧
- 2023-01-17 MATLAB算法技巧和實現斐波那契數列的解決思路_C 語言
- 2022-04-29 C#獲取DataTable對象狀態DataRowState_C#教程
- 2023-02-27 python定時任務sched庫用法簡單實例_python
- 2023-02-14 詳解Go語言如何利用高階函數寫出優雅的代碼_Golang
- 2022-10-26 python連接sql?server數據庫的方法實戰_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支