1. 程式人生 > >python 稀疏儲存與計算-scipy.sparse學習筆記(持續更新...)

python 稀疏儲存與計算-scipy.sparse學習筆記(持續更新...)

常用的幾種稀疏矩陣儲存形式以及適用場景

1. csr_matrix:

     優點:1. 能進行高效的算術運算。如:csr+csr,csr*csr

               2. 行切片很高效

               3. 矩陣向量內積很快

     缺點:1. 列切片很慢 (可以考慮csc)

               2. 稀疏結構的改變很昂貴(可以考慮lil,dok)

2. csc_matrix:

     優點:1. 同上能進行高效的算術運算

               2. 有效的列切片

               3. 很快的矩陣向量內積(csr,bsr更快)

     缺點:1. 行切片慢(考慮csr)

               2. 稀疏結構的改變很昂貴(考慮lil,dok)

3. coo_matrix:

     優點:1. 轉換成其它儲存格式很快捷簡便

               2. 轉換成csr/csc很快

               3. 允許重複的索引(例如在1行1列處存了值2.0,又在1行1列處存了值3.0,則轉換成其它矩陣時就是             

                     2.0+3.0=5.0)

     缺點:1. 不直接支援切片

               2. 不能直接進行算術計算

     coo_matrix構建稀疏矩陣非常快捷,實際中可以轉換成csr/csc形式進行切片,算術計算與向量內積計算。

4. bsr_matrix:

很類似於csr,更適合於矩陣的某些子矩陣很多值,在某些情況下比csr和csc計算更高效。

5. dia_matrix:  

對角線儲存方式,0就在主對角線,-1在主對角線下方的第一條對角線。具體見官網例子。

6. dok_matrix:

     優點:依靠鍵的字典構建矩陣,對於遞增的構建稀疏矩陣很高效,比如定義該矩陣後,想進行每行每列更新值,可用該矩陣。當訪問某個單 

                 元,只需要O(1)

     缺點:不允許重複索引(coo中適用),但可以很高效的轉換成coo後進行重複索引

7. lil_matrix:

優點: 1. 支援靈活的切片

                2. 轉換成其它儲存方式很高效

                3. 適合遞增的構建成矩陣

     缺點:1. lil+lil等算術運算很慢(可以考慮csr,csc)

                2. 列切片很慢(可以考慮csc)

                3. 矩陣向量內積很慢(考慮csr,csc)

                4. 當矩陣很大時,考慮用coo

   注:

稀疏矩陣計算中注意事項:

1.matrix.multiply():

   適合矩陣對應索引元素乘,即結果的每個元素sij=xij*yij,需區別它與點乘。

   有兩個好處:a.該方法適合廣播,即矩陣乘以一個行向量可以廣播到該矩陣的每一行。

                         b.該方法計算後對於計算後矩陣中元素為0的自動忽略。比如a矩陣的第0行0列為1,b矩陣的第0行0列為0,則乘了之                                                         後第0行0列儲存時不會有值。   

                         c.如果是稀疏矩陣*稀疏矩陣,則為矩陣點乘,而密集矩陣*密集矩陣則是對應元素相乘           

2.lil_matrix:

    2.1 lil_matirx平時應用很廣,例如,對一個很大的方陣的對角線迴圈shape[0]次賦值,lil_matrix遠快於csc和csr,所以這種操作建議先轉換為     lil_matrix

    2.2 當進行一些矩陣運算的時候,原始為lil_matrix,之後可能會變成csr_matrix,所以注意檢查慢的原因是不是變成了其它稀疏矩陣格式。

    2.3 當儲存稀疏矩陣時,lil_matrix不適合  原文:matrix: spmatrix (format: ``csc``, ``csr``, ``bsr``, ``dia`` or coo``)

相關推薦

python 稀疏儲存計算-scipy.sparse學習筆記持續更新...

常用的幾種稀疏矩陣儲存形式以及適用場景: 1. csr_matrix:      優點:1. 能進行高效的算術運算。如:csr+csr,csr*csr                2. 行切片

深入理解計算及系統 Chapter2 學習筆記持續更新

信息 得到 編碼方式 apt 轉換 數據 print 機器 void Chapter2 信息的表示和處理 1.將一個十進制的數字x轉換為n進制,可以用n反復除x,得到商q和一個余數r,然後用這個r作為最低位數字,反復這個過程直到商為0,則可以得到n進制的表示,其原理為: x

Python學習筆記持續更新

一. 定義函式時,預設引數的問題 1. 預設引數值為不可變物件(例如常量)時: i = 5 def f(arg=i): print(arg) i = 6 f() 得到的結果將會是輸出5. 2.預設引數為可變物件(例如列表、字典或類)時:

Hbase&Phoenix學習筆記持續更新

1. 檢視某張Hbase表在HDFS中的儲存情況 ``` hadoop fs -ls /apps/hbase/data/data/h3c/log_suspect_track_history_spark/hadoop fs - ls /apps/hbase/data/data/h3c/

【C#】C#學習筆記持續更新

本章比較雜亂,是本人在學習C#中的一些筆記,並不全面,只是一些隨筆。 1.一個 C# 程式主要包括以下部分: 名稱空間宣告(Namespace declaration) 一個 class Class 方法 Class 屬性 一個 Main 方法 語句(Stat

PHP看書學習筆記持續更新

$GLOBALS:包含指向當前程式中全域性範圍內有效的變數,它是一個數組,該陣列的索引(或鍵名)就是全域性變數的名稱。 $_SERVER:該全域性變數是一個包含諸如頭資訊,路徑和指令碼位置的陣列。常見的$_SERVER的元素包括PHP_SELF(當前正在執行的指令碼的檔

Matlab學習筆記持續更新

矩陣 在matlab中矩陣是以陣列的形式存在的,一維陣列相當於 向量,二維陣列相當於矩陣,所以矩陣是陣列的子集 函式名稱 函式功能 ones(n)構建nXn的1矩陣, 矩陣的元素全部是1 ones(m,n)構建mXn的1矩陣 ones (size (A) )構

Hbase&Phoenix學習筆記持續更新

檢視某張Hbase表在HDFS中的儲存情況 hadoop fs -ls /apps/hbase/data/data/h3c/log_suspect_track_history_spark/hadoop fs - ls /apps/hbase/data/dat

Java Spring框架學習筆記持續更新

IOC、DI IOC容器:控制反轉。通常例項化一個類的物件,我們都會用new關鍵字來例項化。而“控制反轉”將物件例項化的這一操作從程式設計師手動完成轉交給IOC容器完成。 DI(依賴注入Dependency injection):容器建立完物件後,處理物件與物件之間的依賴關係。 依賴

vue學習筆記持續更新

vue的例項化 vue的例項化有以下幾種形式: new Vue({ el: '#app', data: { foo: 'bar', items:{ title:"hander", isfi

React學習筆記持續更新

2.2頁面載入過程 1.資源載入過程:URL->DNS查詢->資源請求->瀏覽器解析 ①URL結構:http://www.hhh.com:80/getdata?pid=1#title[協議://域名:埠/路徑?引數#雜湊] ②DNS查詢:瀏覽器<--(ip)(域名)-->D

C++ Primer 學習筆記持續更新......

本筆記主要是一個記錄,整理和總結一下C++學習過程中的知識點。 struct和class 區別:兩個關鍵字都是進行類的定義。struct也可以定義類,和class定義的類唯一不同之處就在於預設的初始訪問級別,struct在不宣告public或者private

【WPF】學習筆記持續更新

1.現在有一個需求。WPF中,或者所有windows框架中,button所呈現的一些效果都是按照系統主題來的。比如我現在將滑鼠移動到按鈕上,它會變藍。如圖: 而現在我想要用WPF實現UWP的效果(變灰)。並且我想加入圖示 這也不能用。因為button預設只能修改b

sklearn scikit-learn學習筆記持續更新

在最近的課題中,發現了機器學習的神器,sklearn,寫一些簡單的分類器對資料進行分類簡直不要舒服本部落格是我在學習官方文件的時候的一些個人的筆記,由於我只關注一些自己見過的方法的呼叫,所以本文僅供參考,建議英語過關的還是要自己看官方文件http://scikit-learn

libev學習筆記持續更新

2014-09-03 -- ==libev學習筆記 ==  參考:1. http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod2.  簡介:libev - a high performance full-featured e

應用統計學R語言實現學習筆記十一——判別分析

Chapter 11 Discriminant Analysis 筆者最近任務繁重,斷更了一頓時間,最近會開始慢慢把這個系列寫完。本篇是第十一章,內容是判別分析。 1 判別分析應用 判別分析(Discriminant Analysis)——判別分

應用統計學R語言實現學習筆記十四——案例實踐

Chapter 14 Case and Practice 本篇是第十四章,內容是案例與實踐。這裡其實是對我公選課的作業做了個彙總。 1 描述性統計與抽樣分佈 1.一種袋裝食品用生產線自動裝填,每袋重量大約為50g,但由於某些原因,每袋重量不會恰好

深度學習計算機視覺[CS231N] 學習筆記4.1:反向傳播Backpropagation

在學習深度學習的過程中,我們常用的一種優化引數的方法就是梯度下降法,而一般情況下,我們搭建的神經網路的結構是:輸入→權重矩陣→損失函式。如下圖所示。 而在給定輸入的情況下,為了使我們的損失函式值達到最小,我們就需要調節權重矩陣,使之滿足條件,於是,就有了本

python+mysql+flask創建一個微博應用持續更新

會話 pen 個人 數據庫管理 用戶角色 啟動 ini view 開啟 微博應用的結構: 用戶管理,包括登錄管理,會話,用戶角色,個人檔案及用戶頭像。 數據庫管理,包括數據庫遷移處理。 Web表單支持,包括字段檢驗和用於防止垃圾郵件的驗證碼功能。 大數據的分頁功能。 全文

tensorflow 學習紀錄持續更新

使用 一個 ant lidar value nod traceback err erro 1 import tensorflow as tf 2 import numpy as np 3 4 #tensor = tf.constant([[1,2,3,4,5,6