<p>bsr的文档在此处<a href="http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.bsr_matrix.html#scipy.sparse.bsr_matrix" rel="nofollow">bsr matrix</a>,csr的文档在此处<a href="http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html#scipy.sparse.csr_matrix" rel="nofollow">csr matrix</a>。在转到bsr之前,了解csr可能是值得的。唯一的区别是bsr的条目本身是矩阵,而csr中的基本单位是标量。在</p>
<p>我不知道是否有超简单的方法来操作矩阵一旦它们被创建,但是这里有一些你想要做的例子</p>
<pre><code>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)) )
</code></pre>
<p>这是一种简单明了的语法,其中列出了数组<code>data</code>中的矩阵中的所有数据,然后使用<code>row</code>和<code>col</code>指定这些数据的位置。请注意,这将使矩阵维数足够大,足以容纳最大行和列中的元素(在本例中为6x8矩阵)。您可以使用<code>todense()</code>方法查看标准形式的矩阵。在</p>
^{pr2}$
<p>但是,不能使用此模式动态操作矩阵。您可以做的是修改矩阵的本机scipy表示。这涉及3个属性,<code>indices</code>,<code>indptr</code>,和<code>data</code>。首先,我们可以检查已经创建的数组的这些属性的值。在</p>
<pre><code>>>> 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)
</code></pre>
<p><code>data</code>和以前一样,是我们想要在矩阵中的一维值数组。不同之处在于,该数据的位置现在由<code>indices</code>和{<cd6>}指定,而不是{<cd2>}和{<cd3>}。<code>indices</code>相当简单。它只是每个数据项所在列的列表。它的大小和<code>data</code>数组总是相同的。<code>indptr</code>有点棘手。它让数据结构知道每个数据项在哪一行。引用文件</p>
<blockquote>
<p>the column indices for row <code>i</code> are stored in <code>indices[indptr[i]:indptr[i+1]]</code> </p>
</blockquote>
<p>从这个定义中我们可以看到<code>indptr</code>的大小总是矩阵中的行数+1。习惯它需要一点时间,但是处理每一行的值会给你一些直觉。请注意,在最后一个条目之前,所有条目都是零。这意味着行<code>i=0-4</code>的列索引将存储在<code>indices[0:0]</code>中,即空数组。这是因为这些行都是零。最后,在最后一行,<code>i=5</code>我们得到<code>indices[0:1]=7</code>,它告诉我们数据条目<code>data[0:1]</code>在第5行第7列。在</p>
<p>现在假设我们想在第2行第4列添加值10。我们首先将它放入<code>data</code>属性中</p>
<pre><code>A.data = np.array( [10,6] )
</code></pre>
<p>接下来我们更新<code>indices</code>以指示第10列将在其中</p>
<pre><code>A.indices = np.array( [4,7], dtype=np.int32 )
</code></pre>
<p>最后,我们通过修改<code>indptr</code>来指示它将位于哪一行</p>
<pre><code>A.indptr = np.array( [0,0,0,1,1,1,2], dtype=np.int32 )
</code></pre>
<p>将数据类型设置为<code>indices</code>和{<cd6>}<code>np.int32</code>,这一点很重要。可视化<code>indptr</code>中的内容的一种方法是,当您从具有数据的行的<code>i</code>移动到{<cd30>}时,数字的变化就会发生。还要注意,像这样的数组可以用来构造稀疏矩阵</p>
<pre><code>B = csr_matrix( (data,indices,indptr) )
</code></pre>
<p>如果能像您尝试的那样简单地索引到数组中,那就太好了,但是实现还没有实现。这至少足以让你开始。在</p>