日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 的csr_python的高级数组之稀疏矩阵

發布時間:2023/12/2 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 的csr_python的高级数组之稀疏矩阵 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

稀疏矩陣的定義:

具有少量非零項的矩陣(在矩陣中,若數值0的元素數目遠多于非0元素的數目,并且非0元素分布沒有規律時,)則稱該矩陣為稀疏矩陣;相反,為稠密矩陣。非零元素的總數比上矩陣所有元素的總數為矩陣的稠密度。

稀疏矩陣的兩個動機:稀疏矩陣通常具有很大的維度,有時甚大到整個矩陣(零元素)與可用內存不想適應;另一個動機是避免零矩陣元素的運算具有更好的性能。

稀疏矩陣的格式

存儲矩陣的一般方法是采用二維數組,其優點是可以隨機地訪問每一個元素,因而能夠容易實現矩陣的各種運算。對于稀疏矩陣,采用二維數組的存儲方法既浪費大量的存儲單元來存放零元素,又要在運算中浪費大量的時間來進行零元素的無效運算。因此必須考慮對稀疏矩陣進行壓縮存儲(只存儲非零元素)。

Scipy.sparse模塊提供了許多來自于稀疏矩陣的不同存儲格式。這里僅描述最為重要的格式CSR、CSC和LIL。CSR、CSC是用于矩陣-矩陣和矩陣-向量運算的有效格式,LIL格式用于生成和更改稀疏矩陣。Python不能自動創建稀疏矩陣,所以要用scipy中特殊的命令來得到稀疏矩陣。

(1)?壓縮稀疏行(CSR,Compressed Sparse Row):或csr_matrix??按行對矩陣進行壓縮的。

CSR使用了三個數組,分別為數值、行偏移(表示某一行的第一個元素在數值里面的起始偏移位置,在行偏移的最后補上矩陣總的元素個數)、列號。CSR是一種編碼的方式

一維數組data(數值):有序地存儲了所有的非零值,它具有與非零元素同樣多數量的元素,通常由變量nnz表示。

一維數組indptr(行偏移量):包含了證書使得indptr[i]是data中元素的索引,它是行i中的第一個非零元素。如果整個行i為零,則indptr[i]==indptr[i+1]

如初始矩陣有m行,則len(indptr)==m+1

一維數組Indices(列號:):其使用如下方式包含列索引信息:indices[indptr[i]:indptr[i+1]]是一個具有行i中非零元素的列索引的整數數組。Len(indice)==len(data)==nnz

備注:列索引表示數值所在的列號,從0開始。

數組data:包含矩陣中的非零元素,以行優先的形式保存。

行偏移:CSR中行索引被壓縮,沒有行索引,這里用行偏移表示行索引。

實例:

如上圖所示:data=(1,7,2,8,5,3,9,6,4)

Indices=(0,1,1,2,0,2,3,1,3) ???#列索引

Indptr=(0,2,4,7,9) ?#行偏移(表示某一行的第一個元素在數值里面的起始偏移位置,在行偏移的最后補上矩陣總的元素個數)

在Python中使用:

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])

A=csr_matrix((data, indices, indptr), shape=(3, 3)).toarray()#生成CSR格式的矩陣

print(A) ???#運行結果:

[[1 0 2]

[0 0 3]

[4 5 6]]

解析:第i行的列索引存儲在indices[indptr[i]:indptr[i+1]]中,對應的值為data[indptr[i]:indptr[i+1]]。即例如第0行的列索引為indices[0:2]=[0,2](第i行中非零元素的列索引組成的整數數組),值為data[0:2]=[1,2];第1行的列索引為indices[2:3]=[2],值為data[2:3]=[3]…

(2)?稀疏列矩陣CSC(Compressed Sparse Column),用于CSC格式的類型為:csc_matrix按列對矩陣進行壓縮的。

與CSR格式相比唯一的不同點是indptr和indices數組的定義,該定義與列有關。

CSC格式的實例:

import numpy as np

import scipy.sparse as sp

A=np.array([[1,0,2,0],[0,0,0,0],[3,0,0,0],[1,0,0,4]])

AS=sp.csc_matrix(A)

Print(AS)

print(AS.data)

print(AS.indptr)

print(AS.indices)

print(AS.nnz) ???#運行結果:

[1 3 1 2 4]

[0 3 3 4 5] ????#注意此處,同一矩陣CSR格式的indptr為[0 2 2 3 5]

[0 2 3 0 3]

5

(3)?基于行的鏈表格式:LIL(Row-Based Linked List Format)

1. 鏈表稀疏格式在列表數據中以行方式存儲非零元素,

列表data: data[k]是行k中的非零元素的列表。如果該行中的所有元素都為0,則它包含一個空列表。

列表rows:?是在位置k包含了在行k中的非零元素列索引列表。

LIL格式的同一示例:

import numpy as np

import scipy.sparse as sp

A=np.array([[1,0,2,0],[0,0,0,0],[3,0,0,0],[1,0,0,4]])

AS=sp.lil_matrix(A)

print(AS.data)

print(AS.rows)

print(AS.nnz) ?#運行結果:

[list([1, 2]) list([]) list([3]) list([1, 4])]

[list([0, 2]) list([]) list([0]) list([0, 3])]

5

2. 用LIL格式更改和切割矩陣:

LIL格式最適合切片的方法,即以LIL格式提取子矩陣,并通過插入非零元素來改變稀疏模式。

例如:提取

import numpy as np

import scipy.sparse as sp

A=np.array([[1,0,2,0],[0,0,0,0],[3,0,0,0],[1,0,0,4]])

AS=sp.lil_matrix(A)

print(AS)

BS=AS[0:2,0:3] ?????#切片提取0,1行,0,1,2列組成的子矩陣

print(BS)

print(BS.data)

print(BS.rows)

#運行結果:

(0, 0) ???????1

(0, 2) ???????2

[list([1, 2]) list([])]

[list([0, 2]) list([])]

更改:插入新的非零元素會自動更新屬性

AS[0,1]=17

print(AS.data)

print(AS.rows)

print(AS.nnz)

#結果:[list([1, 17, 2]) list([]) list([3]) list([1, 4])]

[list([0, 1, 2]) list([]) list([0]) list([0, 3])]

6

生成稀疏矩陣:

Numpy包的命令eye、identity、diag和rand都有其對應的稀疏矩陣,這些命令需要額外的參數來指定所得矩陣的稀疏矩陣格式。

import numpy as np

import scipy.sparse as sp

print(sp.eye(20,20,format = 'lil'))

print(sp.spdiags(np.ones((20,)),0,20,20,format = 'csr'))

print(sp.identity(20,format =?'csc'))

print(sp.rand(20,200,density=0.1,format='csr')) ???#sp.rand命令需要額外的參數來描述生成隨機矩陣的密度。

稀疏矩陣方法

將稀疏矩陣類型轉換為另一種類型和數據或數組的方法:

AS.toarray ?#轉換稀疏矩陣類型為數組

AS.tocsr

AS.tocsc

AS.tolil

#通過issparse、isspmatrix_lil、isspmatrix_csc、isspmatrix_csr等方法檢查稀疏矩陣的類型。

import numpy as np

import scipy.sparse as sp

A=np.array([[1,0,2,0],[0,0,0,0],[3,0,0,0],[1,0,0,4]])

def sparse_sin(A):

if not (sp.isspmatrix_csr(A) or sp.isspmatrix_csc(A)):

A=A.tocsr()

A.data=sin(A.data)

return(A)

B=sparse_sin(A)

print(B)

#稀疏矩陣方法的dot,用于矩陣-矩陣或者矩陣-向量乘法運算,返回csr_matrix或Numpy array

例如:import numpy as np

import scipy.sparse as sp

A=np.array([[1,0,2,0],[0,0,0,0],[3,0,0,0],[1,0,0,4]])

AS=sp.csr_matrix(A)

b=np.array([1,2,3,4])

c=AS.dot(b) ????#結果為:[ 7 ?0 3 ?17]

print(c)

c=AS.dot(AS) ???????#結果仍為稀疏矩陣

print(c)

d=np.dot(AS,b)

print(d) ????#不能返回期望的結果

總結

以上是生活随笔為你收集整理的python 的csr_python的高级数组之稀疏矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91午夜在线 | 综合99| 在线观看国产一区二区三区 | 黄色一区二区视频 | 久久久久久av | 韩国电影一区 | av资源在线免费观看 | 久久无码人妻一区二区三区 | 国产精品96久久久久久 | 国产妇女乱一性一交 | 国产人成在线 | 国产精品mm | 男女激情网址 | 成人免费一级视频 | 91精品国产欧美一区二区成人 | 欧美日韩一区在线观看 | 久久无码高潮喷水 | 九色视频91 | 性中国xxx极品hd | 欧美成人免费播放 | 91华人在线 | 欧美男女性生活视频 | 少妇99 | 久久精品伦理 | 成人av中文字幕 | 123超碰 | 亚洲一区二区三区免费 | 青青草免费看 | 青娱乐97 | 免费欧美黄色 | a免费观看 | 久久久精品视频免费 | 潘金莲一级淫片aaaaaaa | 欧美欧美欧美欧美 | 亚洲中文字幕在线观看 | 欧美日韩一区二区三区在线 | 东京干手机福利视频 | 特a级黄色片 | 成年人免费毛片 | 伊人久久香 | 中文字幕永久在线播放 | 日韩欧美一卡二卡 | 婷婷色婷婷开心五月四房播播 | 麻豆黄色一级片 | 欧美午夜精品一区二区三区 | 欧美三日本三级少妇三99 | 午夜一区二区三区四区 | 日韩欧美一区二区三区免费观看 | 亚洲少妇中文字幕 | 激情综合站 | 亚洲综合在线第一页 | 国产一级一片免费播放放a 丁香六月色 | 中文字幕 日韩有码 | 女人舌吻男人茎视频 | 激情五月俺也去 | 国产女主播喷水视频在线观看 | 日一区二区三区 | 国产一区二区三区在线看 | 欧洲国产视频 | 美女av网址 | 日韩免费观看av | 亚洲AV无码成人精品国产一区 | 国产精华一区二区三区 | 国产一区自拍视频 | 久久天堂 | 潘金莲一级淫片aaaaaa播放 | 一级黄色片网站 | 91精品国产高清一区二区三蜜臀 | av在线导航| 国产亚洲欧美一区二区三区 | 夜夜高潮夜夜爽国产伦精品 | 免费毛片视频 | 欧美极品少妇xxxxⅹ喷水 | 人妻一区二区三区四区五区 | 日日色综合 | 国产精品久久久久久吹潮 | 欧美成人高潮一二区在线看 | 日本aaa级片 | 国产青草视频在线观看 | 国产精品极品 | 日本三级大片 | 富婆如狼似虎找黑人老外 | 欧美成人不卡视频 | 久久久久97 | 好吊色视频一区二区三区 | 欧美成人另类 | 成人黄页网站 | 国产微拍精品 | 农村寡妇一区二区三区 | 爱情岛亚洲品质自拍极速福利网站 | 91在线免费网站 | 91在线观看网站 | www.亚洲激情 | 亚洲视频免费在线播放 | 亚洲精品二 | 国产女主播在线观看 | 中文字幕校园春色 | 丁香六月色| 在线免费看污片 |