python - 创建具有不同平均值的正态分布列
问题描述
我有以下 numpy 矩阵:
R = np.matrix(np.ones([3,3]))
# Update R matrix based on sales statistics
for i in range(0, len(R)):
for j in range(0, len(R)):
R[j,i] = scipy.stats.norm(2, 1).pdf(i) * 100
print(R)
[[ 5.39909665 24.19707245 39.89422804]
[ 5.39909665 24.19707245 39.89422804]
[ 5.39909665 24.19707245 39.89422804]]
我想转换每一列,将索引(0,1,2)乘以正态分布的相应密度值,平均值等于第一列的5.39909665,第二列的24.19707245和第三列的39.8942280;标准差等于 1。
最终,创建一个矩阵为:
[norm(5.39, 1).pdf(0), norm(24.197, 1).pdf(0), ...]
[ norm(5.39, 1).pdf(1), norm(24.197, 1).pdf(1), ...]
[ norm(5.39, 1).pdf(2), norm(24.197, 1).pdf(2), ...]]
如何创建最终矩阵?
解决方案
该pdf
方法的工作原理与任何 numpy 函数非常相似,因为您可以输入具有相同形状的数组并结合标量。您可以使用以下内容创建 R:
ix = np.repeat(np.arange(3),3).reshape((3,3)) #row index, or ix.T for column index
R = scipy.stats.norm(2,1).pdf(ix.T)*100
>>array([[ 5.39909665, 24.19707245, 39.89422804],
[ 5.39909665, 24.19707245, 39.89422804],
[ 5.39909665, 24.19707245, 39.89422804]])
遵循相同的逻辑,如果您希望您的 [i,j] 索引是scipy.stats.norm(scipy.stats.norm(2,1).pdf(j) * 100, 1).pdf(i)
(从您作为结果放置的矩阵中),请使用:
scipy.stats.norm(scipy.stats.norm(2,1).pdf(ix.T) * 100, 1).pdf(ix)
推荐阅读
- python - 如何在回调函数中更改 tkinter 中按钮的文本
- mysql - 如果我尝试安装 MySQL-Server debian 将安装 mariadb-server-10.1
- c - C 到 OCaml - 如果条件在 for 循环 OCaml 内
- c++ - C ++在地图中放置()时防止析构函数调用
- python - Keras 损失值不变
- symfony - Symfony 4 - 用户管理
- java - 通过中继器的动态输入在按钮单击时获取数据
- java - 并行流中的 Fork-Join 池
- postgresql - 在使用 @Query 注释的 Spring 数据存储库方法中返回 DTO 对象
- php - in_array 没有给出想要的输出 - PHP