<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
採用三元組(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]])
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
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]])
lil_matrix,即List of Lists format,又稱為Row-based linked list sparse matrix。它使用兩個巢狀列表儲存稀疏矩陣:data儲存每行中的非零元素的值,rows儲存每行非零元素所在的列號(列號是順序排序的)。
LIL matrix本身的設計是用來方便快捷構建稀疏矩陣範例,而算術運算、矩陣運算則轉化成CSC、CSR格式再進行,構建大型的稀疏矩陣還是推薦使用COO格式。
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]])
要有效地構造矩陣,請使用dok_matrix或lil_matrix
lil_matrix類支援基本切片和花式索引,其語法與NumPy Array類似;lil_matrix形式是基於row的,因此能夠很高效的轉為csr,但是轉為csc效率相對較低。
要執行乘法或轉置等操作,首先將矩陣轉換為CSC或CSR格式,效率高
CSR格式特別適用於快速矩陣向量產品
CSR,CSC和COO格式之間的所有轉換都是線性複雜度。
到此這篇關於numpy稀疏矩陣的實現的文章就介紹到這了,更多相關numpy 稀疏矩陣內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45