我有一个形状为
我还尝试了遍历每一行的
更新: 我尝试了一些非常简单的方法,似乎比我之前提到的方法更有效率。这个想法是使用
(70000, 80000)
的 csr_matrix
A
和另一个形状为 (1, 80000)
的 csr_matrix
B
。如何高效地将B添加到A的每一行?一个想法是创建一个稀疏矩阵 B'
,其中重复了B
的行,但是 numpy.repeat
不起作用,使用一个全是1的矩阵来创建 B'
将非常浪费内存。我还尝试了遍历每一行的
A
并将其加上 B
,但这同样非常耗时。更新: 我尝试了一些非常简单的方法,似乎比我之前提到的方法更有效率。这个想法是使用
scipy.sparse.vstack
:C = sparse.vstack([B for x in range(A.shape[0])])
A + C
这对我的任务表现良好!还有一些发现:我最初尝试了一种迭代方法,其中我多次调用vstack
,但这种方法比只调用一次要慢。
sparse.bsr_matrix((np.tile(B.data(N,1)).T[:,:,None], B.indices, B.indptr), shape=(N,M))
可以快速创建正确的bsr
格式矩阵。但是,应用tocsr
以便进行加法运算会使总时间与你的答案相同。 - hpaulj