的BSR的文檔是在這裏bsr matrix和企業社會責任是這裏csr matrix。在轉移到bsr之前,理解csr可能是值得的。唯一的區別是bsr自身具有條目,而csr中的基本單元是標量。
我不知道是否有超級簡單的方法來操縱矩陣一旦被創建,但在這裏是你試圖做一些例子,
import numpy as np
from scipy.sparse import bsr_matrix, csr_matrix
row = np.array([5])
col = np.array([7])
data = np.array([6])
A = csr_matrix((data,(row,col)))
這是一個簡單的語法在其中列出陣列中所有想要的數據data
,然後使用row
和col
指定數據應該到達的位置。請注意,這將使矩陣尺寸足夠大,以將元素保存在最大的行和列中(在這種情況下爲6x8矩陣)。您可以使用todense()
方法以標準形式查看矩陣。
A.todense()
但是,您無法使用此模式來動態調整矩陣。你可以做的是修改矩陣的本地scipy表示。這涉及3個屬性,indices
,indptr
和data
。首先,我們可以檢查我們已經創建的數組的這些屬性的值。
>>> print A.data
array([6])
>>> print A.indices
array([7], dtype=int32)
>>> print A.indptr
array([0, 0, 0, 0, 0, 0, 1], dtype=int32)
data
是它以前一樣的東西,的值的1-d陣列,我們希望在基質中。區別在於現在這個數據的位置由indices
和indptr
指定,而不是row
和col
。 indices
非常簡單。它只是列出每個數據條目所在的列。它將始終是相同的大小和data
陣列。 indptr
有點棘手。它可以讓數據結構知道每個數據項是哪一行,若要從文檔報價,
爲i
行的列索引存儲在indices[indptr[i]:indptr[i+1]]
從這個定義可以看出, indptr
的大小將始終是矩陣+ 1中的行數。需要一點時間才能習慣它,但通過每行的值的工作會給你一些直覺。請注意,所有條目都是零,直到最後一個。這意味着行i=0-4
的列索引將被存儲在indices[0:0]
即空陣列中。這是因爲這些行都是零。最後,在最後一行,i=5
我們得到indices[0:1]=7
它告訴我們數據輸入(IES)data[0:1]
是第5行7列
現在假設我們想在行2列4增加值10。我們首先把它放到data
屬性,
A.data = np.array([10,6])
接下來我們更新indices
指示柱10將在,
A.indices = np.array([4,7], dtype=np.int32)
,最後我們表明它會通過修改indptr
在哪一行
A.indptr = np.array([0,0,0,1,1,1,2], dtype=np.int32)
重要的是你要使數據類型爲indices
和indptr
np.int32
。一種可視化indptr
中發生的事情的方法是,當您從具有數據的行的i
移動到i+1
時,會發生數字更改。另外要注意,像這樣的陣列可用於構建稀疏矩陣
B = csr_matrix((data,indices,indptr))
這將是很好,如果它是簡單地索引到數組你嘗試過一樣容易,但執行是還沒有。這應該足以讓你至少開始。