我正在努力实现以下等式:
X =(Y.T * Y + Y.T * C * Y) ^ -1
Y 是 (nxf) 矩阵,C 是 (nxn) 对角矩阵;n 约为 300k,f 将在 100 到 200 之间变化。作为优化过程的一部分,这个方程将被使用近 1 亿次,因此必须非常快速地处理它。
Y 是随机初始化的,C 是一个非常稀疏的矩阵,对角线上的 300k 中只有少数数字会与 0 不同。由于 Numpy 的对角函数会创建密集矩阵,因此我将 C 创建为稀疏 csr 矩阵。但是当试图解方程的第一部分时:
r = dot(C, Y)
计算机由于内存限制而崩溃。然后我决定尝试将 Y 转换为 csr_matrix 并进行相同的操作:
r = dot(C, Ysparse)
这种方法花费了1.38 ms。但是这个解决方案有点“棘手”,因为我使用稀疏矩阵来存储密集矩阵,我想知道这到底有多有效。
所以我的问题是,是否有某种方法可以将稀疏 C 和密集 Y 相乘,而不必将 Y 变为稀疏并提高性能?如果 C 可以以某种方式表示为对角密集而不消耗大量内存,那么这可能会导致非常高效的性能,但我不知道这是否可能。
我感谢您的帮助!