【问题标题】:creating a large pdf matrix efficiently有效地创建一个大的pdf矩阵
【发布时间】:2018-04-16 12:35:34
【问题描述】:

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

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

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

例如,我可以使用以下代码来做到这一点:

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。有替代方案吗?

【问题讨论】:

  • scipy 可以在我的计算机中在约 26 毫秒内以 60000 点计算这样的 pdf,执行 60000 次需要约 26 分钟。不幸的是,我的计算机似乎无法分配 60000 x 60000 的 float64 数组。
  • 是的,抱歉,这不是问题。大矩阵是问题所在。谢谢

标签: python numpy scipy vectorization


【解决方案1】:

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

Very large matrices using Python and NumPy

所以我不认为这是可以做到的

【讨论】:

    猜你喜欢
    • 2021-02-02
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2012-09-02
    • 2013-03-02
    • 1970-01-01
    • 2011-12-17
    • 2019-04-22
    相关资源
    最近更新 更多