首頁 後端開發 Python教學 Python稀疏矩陣之sparse儲存與轉換的詳細介紹

Python稀疏矩陣之sparse儲存與轉換的詳細介紹

May 28, 2017 am 10:56 AM

這篇文章主要介紹了Python 稀疏矩陣-sparse 儲存和轉換的相關資料,需要的朋友可以參考下

##稀疏矩陣-sparsep#

from scipy import sparse
登入後複製

稀疏矩陣的儲存形式

在科學與工程領域中求解線性

模型時經常出現許多大型的矩陣,這些矩陣中大部分的元素都為0,稱為稀疏矩陣。用NumPy的ndarray數組保存這樣的矩陣,將很浪費內存,由於矩陣的稀疏特性,可以通過只保存非零元素的相關信息,從而節約內存的使用。此外,針對這種特殊結構的矩陣編寫運算函數,也可以提高矩陣的運算速度。

scipy.sparse庫中提供了多種表示稀疏矩陣的格式,每種格式都有不同的用處,其中dok_matrix和lil_matrix適合逐漸添加元素。

dok_matrix從dict

繼承,它採用字典保存矩陣中不為0的元素:字典的鍵是一個保存元素(行,列)資訊的元組,其對應的值為矩陣中位於(行,列)中的元素值。顯然字典格式的稀疏矩陣很適合單一元素的新增、刪除和存取操作。通常用來逐漸加入非零元素,然後轉換成其它支援快速運算的格式。

a = sparse.dok_matrix((10, 5))
a[2:5, 3] = 1.0, 2.0, 3.0
print a.keys()
print a.values()
登入後複製
[(2, 3), (3, 3), (4, 3)]
[1.0, 2.0, 3.0]
登入後複製

lil_matrix使用兩個清單儲存非零元素。 data保存每行中的非零元素,rows保存非零元素所在的列。這種格式也很適合逐一加入元素,並且能快速取得行相關的資料。

b = sparse.lil_matrix((10, 5))
b[2, 3] = 1.0
b[3, 4] = 2.0
b[3, 2] = 3.0
print b.data
print b.rows
登入後複製
[[] [] [1.0] [3.0, 2.0] [] [] [] [] [] []]
[[] [] [3] [2, 4] [] [] [] [] [] []]
登入後複製

coo_matrix採用三個陣列row、col和data保存非零元素的資訊。這三個陣列的長度相同,row保存元素的行,col保存元素的列,data保存元素的值。 coo_matrix不支援元素的存取和增刪,一旦創建之後,除了將之轉換成其它格式的矩陣,幾乎無法對其做任何操作和矩陣運算。

coo_matrix支援重複元素,即相同行列座標可以出現多次,當轉換為其它格式的矩陣時,將對相同行列座標對應的多個值進行求和。在下面的例子中,(2, 3)對應兩個值:1和10,將其轉換為ndarray數組時這兩個值加在一起,所以最終矩陣中(2, 3)座標上的值為11 。

許多稀疏矩陣的資料都是採用這種格式保存在檔案中的,例如某個CSV檔案中可能有這樣三列:「使用者ID,商品ID,評價值」。採用numpy.loadtxt或pandas.read_csv將資料讀入之後,可以透過coo_matrix快速將其轉換成稀疏矩陣:矩陣的每行對應一位用戶,每列對應一件商品,而元素值為用戶對商品的評價。

row = [2, 3, 3, 2]
col = [3, 4, 2, 3]
data = [1, 2, 3, 10]
c = sparse.coo_matrix((data, (row, col)), shape=(5, 6))
print c.col, c.row, c.data
print c.toarray()
登入後複製
[3 4 2 3] [2 3 3 2] [ 1 2 3 10]
[[ 0 0 0 0 0 0]
 [ 0 0 0 0 0 0]
 [ 0 0 0 11 0 0]
 [ 0 0 3 0 2 0]
 [ 0 0 0 0 0 0]]
登入後複製

個人操作中選擇,coo_matrix 選在因為涉及稀疏矩陣運算,但是如果不用其他形式存儲則複雜度太高(時間和空間)1000*1000的matrix大約話2h,也是要命了。無奈想到了Pajek軟體中資料的輸入格式三元組:

所以想到將自己的資料處理成類似的三元組!

即「matrix矩陣」—>"tuple三元組"—>"sparseMatrix2tuple"—>"scipy.sparse"

以上是Python稀疏矩陣之sparse儲存與轉換的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

See all articles