如何加快计算稀疏矩阵之间的方差

How to speed up calculating variance among sparse matrix

感谢您的帮助。让我更清楚地解释我的问题。

我有几个 coo_matrix M 形状相同。每个矩阵的索引代表一个期刊对。每个元素代表一个期刊对的频率。例如, 对于所有矩阵,[1,2] 给出期刊对 1-2 的频率; [2,1] 给出期刊对 2-1 的频率。

我的目标是获取每个期刊对的频率方差。

如果我理解正确(如果我错了请纠正我),您希望计算所有具有相同形状的稀疏矩阵列表的元素方差。例如,您可以有 100 个稀疏矩阵,每个大小为 200 x 300,如下所示。

from scipy import sparse
matrices = [sparse.random(200, 300) for i in range(100)]

您可以计算这些矩阵的元素均值,方法是将它们相加并除以列表中的矩阵数。

def get_elmwise_mean(matrices):
    return sum(matrices) / len(matrices)

根据元素均值,您可以使用以下任一公式计算元素方差:

  1. Var(X) = E[X^2] - E[X]^2

  2. Var(X) = E[(X - E[x])^2]

使用公式 1.

squared_matrices = list(map(lambda mat: mat.power(2), matrices))
elmwise_var = get_elmwise_mean(squared_matrices) - get_elmwise_mean(matrices).power(2)

使用公式 2。

elmwise_mean = get_elmwise_mean(matrices)
squared_matrices = list(map(lambda mat: (mat - elmwise_mean).power(2), matrices))
elmwise_var = get_elmwise_mean(squared_matrices)

我刚刚意识到我应该使用 x.power(2) 而不是 np.power(2) 来解决这个问题。This is my code