如何用Python计算嵌套向量所有概率组合乘积及对应关联值
实现方案
我们可以用Python标准库的itertools.product生成所有路径的笛卡尔积,再分别计算概率乘积和对应附加元素的组合即可,完整代码如下:
from itertools import product a = [ [[0.58, 0.0001], [0.43, 0.002]], [[0.55, 0.1], [0.45, 0.2]], [[0.7, 0.0021], [0.3, 0.2]] ] result = [] # 生成所有层各选一个元素的路径组合 for path in product(*a): # 计算当前路径的概率乘积 prob = 1.0 attr_tuple = [] for node in path: prob *= node[0] attr_tuple.append(node[1]) result.append([prob, tuple(attr_tuple)]) # 输出结果 for item in result: print(item)
运行输出示例
[0.22329999999999998, (0.0001, 0.1, 0.0021)] [0.0696, (0.0001, 0.1, 0.2)] [0.18269999999999997, (0.0001, 0.2, 0.0021)] [0.0568, (0.0001, 0.2, 0.2)] [0.16555, (0.002, 0.1, 0.0021)] [0.0516, (0.002, 0.1, 0.2)] [0.13544999999999997, (0.002, 0.2, 0.0021)] [0.0421, (0.002, 0.2, 0.2)]
代码说明
product(*a)会自动对a的每一层子列表做笛卡尔积,生成所有可能的路径组合,刚好对应树形结构的所有遍历路径- 遍历每一条路径时,逐节点累积概率乘积,同时收集每个节点的第二个元素拼成元组,最终组装成要求的输出格式
- 如果需要处理浮点数精度问题,可以用
round(prob, 6)之类的方法保留指定小数位
内容的提问来源于stack exchange,提问作者fredMac
相关产品推荐
相关产品推荐

