我有一个csr_matrix' a'稀疏矩阵的类型。我想执行一项操作来创建一个新的csr_matrix' b'其中每一排' b'与第一行' a'相同。
我认为对于普通的numpy数组,可以使用' tile'操作。但我无法为csr_matrix找到相同的内容。
首先制作一个numpy矩阵并转换为csr_matrix不是一个选项,因为矩阵的大小是10000 x 10000.
答案 0 :(得分:1)
我实际上可以回答哪些不需要创建完整的numpy矩阵,并且对我来说非常快。因此,如果它对将来的人有用,请将其添加为答案:
rows, cols = a.shape
b = scipy.sparse.csr_matrix((np.tile(a[2].data, rows), np.tile(a[2].indices, rows),
np.arange(0, rows*a[2].nnz + 1, a[2].nnz)), shape=a.shape)
这是第二排的' a'并将其拼贴以创建' b'
以下是定时测试,10000x10000矩阵似乎相当快:
100 loops, best of 3: 2.24 ms per loop
答案 1 :(得分:0)
有 a1 = a[I,:]
ll = [a1,a1,a1,a1]
sparse.blk_matrix(ll)
格式,可让您从其他矩阵列表中创建新的稀疏矩阵。
首先,你可以
coo
我没有运行shell来测试它。
在内部,此格式将所有输入数组转换为coo
格式,并将其data
属性收集到3个大型列表(或数组)中。在您的平铺行的情况下,col
和row
(j)值将重复。 coo
(I)值会逐步显示。
接近它的另一种方法是构造一个小的测试矩阵,并查看属性。你看到了什么样的重复?很容易看到lil
格式的模式。 *n
可能也很容易复制,可能使用列表csr
操作。 pip install virtualenv virtualenvwrapper
更难以理解。
答案 2 :(得分:0)
可以的
row = a.getrow(row_idx)
n_rows = a.shape[0]
b = tiled_row = sp.sparse.vstack(np.repeat(row, n_rows))