我有一个包含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。还有其他选择吗?
答案 0 :(得分:0)
刚刚意识到创建一个大小(60,0000 x 60,000)的矩阵无法在python中处理:
Very large matrices using Python and NumPy
所以我不认为这可以做到