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