我必须求一个大型稀疏矩阵的逆(50000 x 12000)。它最初存储为numpy.ndarray,矩阵的大小约为3.5 GB。我曾尝试使用numpy.linalg.pinv求逆此矩阵,但它会导致jupyter笔记本内核崩溃。将此numpy.ndarray转换为scipy.sparse.csr_matrix(稀疏矩阵格式)可以工作,但我不知道有任何函数可以计算csr_matrix的伪逆。如何求大型稀疏矩阵的伪逆矩阵?
numpy.ndarray
numpy.linalg.pinv
scipy.sparse.csr_matrix
smdncfj31#
稀疏矩阵的逆矩阵或伪逆矩阵不一定是稀疏的,所以在计算pinv时,无论如何都必须存储一个大小相似的完整矩阵,并进行多个中间步骤。我们还可以通过例如numpy.linalg.lsts和scipy.linalg.lstsq来求解系统,其不需要显式地找到矩阵的(伪)逆,这一方面在存储器和计算方面更便宜,而且在数值上更稳定。最后,您还可以使用上述函数通过求解最小化2范数来逐列计算伪逆
pinv
numpy.linalg.lsts
scipy.linalg.lstsq
|| A*x - e_j ||
并分别保存它们。
1条答案
按热度按时间smdncfj31#
稀疏矩阵的逆矩阵或伪逆矩阵不一定是稀疏的,所以在计算
pinv
时,无论如何都必须存储一个大小相似的完整矩阵,并进行多个中间步骤。我们还可以通过例如
numpy.linalg.lsts
和scipy.linalg.lstsq
来求解系统,其不需要显式地找到矩阵的(伪)逆,这一方面在存储器和计算方面更便宜,而且在数值上更稳定。最后,您还可以使用上述函数通过求解最小化2范数来逐列计算伪逆
并分别保存它们。