将稀疏数组中的元素与矩阵中的行相乘

将稀疏数组中的元素与矩阵中的行相乘,第1张

将稀疏数组中的元素与矩阵中的行相乘

不幸的是,

.multiply
如果另一个CSR矩阵密集,则CSR矩阵的方法似乎会使该矩阵致密。因此,这是避免这种情况的一种方法:

# Assuming that Y is 1D, might need to do Y = Y.A.ravel() or such...# just to make the point that this works only with CSR:if not isinstance(X, scipy.sparse.csr_matrix):    raise ValueError('Matrix must be CSR.')Z = X.copy()# simply repeat each value in Y by the number of nnz elements in each row: Z.data *= Y.repeat(np.diff(Z.indptr))

这确实会创建一些临时对象,但至少将其完全矢量化,并且不会使稀疏矩阵致密。


对于COO矩阵,等效项是:

Z.data *= Y[Z.row] # you can use np.take which is faster then indexing.

对于CSC矩阵,等效项为:

Z.data *= Y[Z.indices]


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5667758.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存