高斯分布的乘积

复制代码
import matplotlib.pyplot as plt
from math import *

class Distribution:
    def __init__(self,mu,sigma,x,values,start,end):
        self.mu = mu
        self.sigma = sigma
        self.values = values
        self.x = x
        self.start = start
        self.end =end

    def normalize(self):
        s = float(sum(self.values))
        if s != 0.0:
            self.values = [i/s for i in self.values]

    def value(self, index):
        index -= self.start
        if index<0 or index >= len(self.values):
            return 0.0
        else:
            return self.values[index]

    @staticmethod
    def gaussian(mu,sigma,cut = 5.0):
        sigma2 = sigma*sigma
        extent = int(ceil(cut*sigma))
        values = []
        x_lim=[]
        for x in xrange(mu-extent,mu+extent+1):
            x_lim.append(x)
            values.append(exp((-0.5*(x-mu)*(x-mu))/sigma2))
        p1=Distribution(mu,sigma,x_lim,values,mu-extent,mu-extent+len(values))
        p1.normalize()
        return p1

if __name__=='__main__':
    p1 = Distribution.gaussian(100,10)
    plt.plot(p1.x,p1.values,"b-",linewidth=3)

    p2 = Distribution.gaussian(150,20)
    plt.plot(p2.x,p2.values,"g-",linewidth=3)

    start = min(p1.start,p2.start)
    end = max(p1.end,p2.end)
    mul_dist = []
    x_lim = []

    for index in range(start,end):
        x_lim.append(index)
        mul_dist.append(p1.value(index)*p2.value(index))
    #normalize the distribution
    s= float(sum(mul_dist))
    if s!=0.0:
        mul_dist=[i/s for i in mul_dist]

    plt.plot(x_lim,mul_dist,"r-",linewidth=3)
    plt.show()
复制代码

 

参考链接:高斯分布的乘积

posted @   rainbow70626  阅读(527)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示