有效地创建一个大的pdf矩阵

时间:2017-11-03 17:36:27

标签: python numpy scipy vectorization

我有一个包含60,000个表单示例的数据集:

      mu1     mu2    std1    std2
0   -0.745   0.729  0.0127  0.0149
1   -0.711   0.332  0.1240  0.0433
...

它们本质上是二维正态分布的参数。我想要做的是创建一个(N×N)矩阵P,使得P_ij = Normal(mu_i | mean = mu_j,cov = diagonal(std_j)),其中mu_i是(mu1,mu2)数据'i'。

我可以使用以下代码执行此操作,例如:

from scipy import stats
import numpy as np

mu_all = data[['mu1', 'mu2']]
std_all = data[['std1', 'std2']]
P = []
for i in range(len(data)):
    mu_i = mu_all[i,:]
    std_i = std_all[i,:]
    prob_i = stats.multivariate_normal.pdf(mu_all, mean=mu_i, cov=np.diag(std_i))
    P.append(prob_i)

P = np.array(P).T

但这太贵了(我的机器冻结了)。我怎样才能更有效地做到这一点?我的猜测是,scipy不能同时处理60000的计算pdf。还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

刚刚意识到创建一个大小(60,0000 x 60,000)的矩阵无法在python中处理:

Very large matrices using Python and NumPy

所以我不认为这可以做到