我试图了解 scipy CSR 的工作原理。
https://docs.scipy.org/doc/scipy/reference/sparse.html https://docs.scipy.org/doc/scipy/reference/sparse.html
例如,以下矩阵https://en.wikipedia.org/wiki/Sparse_matrix https://en.wikipedia.org/wiki/Sparse_matrix
( 0 0 0 0 )
( 5 8 0 0 )
( 0 0 3 0 )
( 0 6 0 0 )
它说 CSR 表示如下。
V 必须在行列表中从左到右列出一行又一行的非零元素吗?
我能够了解COL_INDEX
是 V 中元素对应的列索引(第 1 列索引为 0)。
我不明白ROW_INDEX
。谁能告诉我如何ROW_INDEX
是从原始矩阵创建的?谢谢。
V = [ 5 8 3 6 ]
COL_INDEX = [ 0 1 2 1 ]
ROW_INDEX = [ 0 0 2 3 4 ]
来自scipy https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html manual:
csr_matrix((data,indexs,indptr),[shape=(M,N)])是标准
CSR 表示形式,其中行 i 的列索引存储在
indexs[indptr[i]:indptr[i+1]] 及其对应的值为
存储在 data[indptr[i]:indptr[i+1]] 中。如果形状参数不是
提供后,矩阵维度是从索引数组推断出来的。
indptr
是相同的ROW_INDEX
and indicies
是相同的COL_INDEX
.
这是创建索引和值数组的简单方法的示例。本质上,ROW_INDICES[i + 1] 是从第 0 行到第 i 行(含)的非零整数的总数,最后一个条目是非零条目的总数。
ROW_INDICES = [0]
COL_INDICES = []
VALS = []
for i in range(num_rows):
ROW_INDICES.append(ROW_INDICES[i])
for j in range(num_cols):
if m[i, j] > 0:
ROW_INDICES[i + 1] += 1
COL_INDICES.append(j)
VALS.append(m[i, j])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)