scipy 如何求大型稀疏矩阵的伪逆?

gupuwyp2  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(361)

我必须求一个大型稀疏矩阵的逆(50000 x 12000)。它最初存储为numpy.ndarray,矩阵的大小约为3.5 GB。我曾尝试使用numpy.linalg.pinv求逆此矩阵,但它会导致jupyter笔记本内核崩溃。将此numpy.ndarray转换为scipy.sparse.csr_matrix(稀疏矩阵格式)可以工作,但我不知道有任何函数可以计算csr_matrix的伪逆。
如何求大型稀疏矩阵的伪逆矩阵?

smdncfj3

smdncfj31#

稀疏矩阵的逆矩阵或伪逆矩阵不一定是稀疏的,所以在计算pinv时,无论如何都必须存储一个大小相似的完整矩阵,并进行多个中间步骤。
我们还可以通过例如numpy.linalg.lstsscipy.linalg.lstsq来求解系统,其不需要显式地找到矩阵的(伪)逆,这一方面在存储器和计算方面更便宜,而且在数值上更稳定。
最后,您还可以使用上述函数通过求解最小化2范数来逐列计算伪逆

|| A*x - e_j ||

并分别保存它们。

相关问题