【发布时间】:2021-01-26 11:30:46
【问题描述】:
我有一个大小为n*m 的二维均值矩阵,其中n 是样本数,m 是数据的维度。
我也有nm*m 的矩阵,即 sigma 是我的形状为n*m*m 的方差矩阵。
我希望从上述分布中抽取n 样本,例如x_i~N(mean[i], sigma[i])。
在numpy 或任何其他不使用 for 循环运行的标准库中有什么方法可以做到这一点?
我认为唯一的选择是使用np.random.multivariate_normal(),将均值矩阵展平为一个向量,并将 3D sigma 展平为 2D 块对角矩阵。当然,之后会重塑。但这意味着我们将使用形状为 (n*m)*(n*m) 的 sigma 的样本,这很容易变得非常大,并且仅计算和分配该矩阵(如果可能)可能比在 for 循环中运行花费更长的时间。
在我的具体任务中,现在 Sigma 是所有样本的相同矩阵,这意味着我可以用m*m 表示 Sigma,并且所有 n 个点都是相同的。但我对通用解决方案感兴趣。
感谢您的帮助。
【问题讨论】:
标签: python numpy matrix distribution normal-distribution