python - 从python中的联合分布制作边际分布
问题描述
我有 3 个 X 值、Y 值和概率数组。我正在尝试做两件事,但它们实际上与我想象的编码方式相同。
我想找到所有相同的 X 值,并将相应的概率加到另一个数组中。(所以如果我的 X 值为 [3,7,4,7] 并且我的概率是 [.2,.3,.1,.4] 我想将 .3 和 .4 加在一起。我正在尝试用一个循环来做这个,但因为我两周前才拿起python,所以我很挣扎。
我想尝试的思考过程:
MargX=np.unique(X array)
MargXp=np.zeros(len(MargX))
for Ind in range(len(MargX):
?
(这里我想取我的 X 数组中相等的值,从我的 p 数组中获取相应的值,然后将它们添加到我的零数组 MargXp 中)
我尝试了几种不同的方法来设置我的循环,以便它将值添加到我制作的零数组中,但无济于事,因为我不断收到语法错误和其他各种错误。
解决方案
如果您尝试将 X 压缩为unique
,那么找到相应的概率将涉及在 X 数组中搜索索引并使用这些索引来找到相应的概率。我认为您会更乐意使用 python 的字典概念将键(x 值)与值(概率)相关联。Usingdefaultdict
允许您为字典中尚未包含的键指定默认值。在这种情况下,从任意 x 值的概率为零的想法开始。当您遍历 x/概率对时,您可以使用增量将概率添加到与 x 关联的存储值或默认值。
结果如下所示:
from collections import defaultdict
# synchronized arrays from your example.
x = [3, 7, 4, 7]
probs = [0.2, 0.3, 0.1, 0.4]
marginal = defaultdict(lambda: 0.0) # 0.0 is the default value
for key, value in zip(x, probs): # zip combines the arrays as pairs
marginal[key] += value # increment to accumulate total probability
# The following line is not strictly needed since all values are
# in the dictionary, but by default key values are not ordered.
orderedkeys = sorted(marginal.keys())
for key in orderedkeys:
print(key, marginal[key])
产生:
3 0.2
4 0.1
7 0.7
推荐阅读
- php - 关于字段 Googlemap 的 wordpress 问题的 acf
- linux - 将进程限制为特定数量的 CPU
- dart - 按下新屏幕后默认后退按钮不显示
- javascript - 如何使用 for 循环显示图像?
- laravel - 在 Laravel 应用程序中为每个用户接收短信
- postgresql - 使用 DEFAULT 处理 PostgreSQL 视图触发器中的 NULL 值?
- graphviz - 如何引用/命名形状的特定部分?
- assembly - 自定义键盘中断处理程序。集会。8086
- java - 哪种是“线程化”springboot应用程序的最简单方法?
- android - 媒体播放器的替代品