<p>都在<code>.data</code>和<code>.rows</code></p>
<pre><code>from scipy import sparse
arr = sparse.random(10,5,format='lil', density=0.5)
</code></pre>
<p>对于此包含25个元素的10x5阵列:</p>
<pre><code>>>> arr
<10x5 sparse matrix of type '<class 'numpy.float64'>'
with 25 stored elements in List of Lists format>
>>> arr.data.shape
(10,)
>>> arr.data
array([list([0.7656088763162588, 0.7262695483137545]),
list([0.5229054168281109, 0.6329489698531673, 0.9090750679268123]),
list([0.3285250285217297, 0.12678874412598085, 0.49074613569184733]),
list([0.9376762935882884]), list([0.7783159122917774]),
list([0.8750078624527947, 0.017065437987856757, 0.7161352157970525]),
list([0.6849637433019786, 0.05732598765212671, 0.09948536587262824]),
list([0.5683250727980487, 0.960851197599538, 0.7540173942047833]),
list([0.5891879469424754, 0.7901005027272154, 0.5829700379167293]),
list([0.6266097436787399, 0.8843420498719459, 0.9040791506861361])],
dtype=object)
</code></pre>
<p><code>.data</code>数组的每个元素都是一个列表,其中包含该行的值</p>
<pre><code>>>> arr.rows
array([list([0, 4]), list([0, 1, 4]), list([1, 3, 4]), list([1]),
list([3]), list([0, 1, 2]), list([0, 1, 4]), list([1, 2, 3]),
list([0, 2, 4]), list([0, 1, 3])], dtype=object)
</code></pre>
<p><code>.rows</code>数组的每个元素都是<code>.data</code>中每个非零值的列索引列表</p>
<blockquote>
<p>Note that I'm using lil_matrix because I will need to assign nonzero values to it within a very large, double for loop.</p>
</blockquote>
<p>这几乎肯定不是一个好主意。<code>lil_matrix</code>的开销意味着,如果它的稀疏度不小于5%,那么填充密集数组几乎肯定会更好。即使这样,也很不确定。这是一种非常糟糕的数据存储格式</p>
<p>编辑:</p>
<pre><code>>>>> for r in arr:
>>>> print(r.data)
[list([0.7656088763162588, 0.7262695483137545])]
[list([0.5229054168281109, 0.6329489698531673, 0.9090750679268123])]
[list([0.3285250285217297, 0.12678874412598085, 0.49074613569184733])]
[list([0.9376762935882884])]
[list([0.7783159122917774])]
[list([0.8750078624527947, 0.017065437987856757, 0.7161352157970525])]
[list([0.6849637433019786, 0.05732598765212671, 0.09948536587262824])]
[list([0.5683250727980487, 0.960851197599538, 0.7540173942047833])]
[list([0.5891879469424754, 0.7901005027272154, 0.5829700379167293])]
[list([0.6266097436787399, 0.8843420498719459, 0.9040791506861361])]
</code></pre>
<p>编辑2:</p>
<p>我不知道你的实际功能或目标是什么,但如果你知道你有多少非零项,你可以预先分配你需要的数组,跳过整个lil的事情</p>
<pre><code>import numpy as np
N = 10000
data, rows, cols = np.zeros(N), np.zeros(N), np.zeros(N)
for i, r in enumerate(_):
for j, c in enumerate(_):
_idx = i * len(cols) + j
data[_idx] = some_data_function()
rows[_idx] = r
cols[_idx] = c
arr = sparse.csr_matrix((data, (rows, cols)))
</code></pre>