如何加快计算稀疏矩阵之间的方差
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)
根据元素均值,您可以使用以下任一公式计算元素方差:
Var(X) = E[X^2] - E[X]^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
感谢您的帮助。让我更清楚地解释我的问题。
我有几个 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)
根据元素均值,您可以使用以下任一公式计算元素方差:
Var(X) = E[X^2] - E[X]^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