[易懂实例讲解]离散型贝叶斯滤波python编程代码实践

本文是从例子的角度来讲解贝叶斯滤波。如果你想看贝叶斯滤波的理论推导的话可以看这篇文章《我是如何十分钟理解与推导贝叶斯滤波(Bayes Filter)算法?》。不懂贝叶斯滤波理论也凭直觉可以看懂本文的例子和Python代码实践。

例子的背景介绍

假设有一个机器人它在困在一个管子里面了,只能前进或后退。管子的长度是20cm。机器人收到"前进"命令后有三种可能“有25%概率不执行,有50%概率前进1cm,有25%概率前进2cm”。当然也有特殊情况当机器人离端点只有1cm的时候那么它“25%概率不执行命令,75%概率只走1cm”。当机器人就在端点的时候它就卡住了。现在机器人在11cm那个地方,我向它发送了9个“前进”控制命令。问机器人执行完这9个命令后在各个位置的概率各是多少(即求机器人位于各个位置的概率分布)。

分析

初始位置它是在11cm那个地方,这意味着机器人位于其他19个地方概率是0, 而11cm那个地方的概率是1. 注意:机器人位于这20个地方的概率之和加起来要等于1 (因为他们是一个概率分布里面的)。
概率数组表示就是下面酱紫:
[0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0]

接下来我们分析下它收到第一个前进命令会怎么操作

从前面的背景信息可以看到现在机器人在第11位所以有三种情况(只有在靠近端点才可能少于3种)

  1. 25%概率不执行命令
  2. 50%概率前进1位
  3. 25%概率前进2位

所以概率数组更新为
[0 0 0 0 0 0 0 0 0 0 1*0.25 1*0.5 1*0.25 0 0 0 0 0 0 0]=[0 0 0 0 0 0 0 0 0 0 0.25 0.5 0.25 0 0 0 0 0 0 0]

接下来看它收到第二个前进命令如何变化

它现在仍然没有靠近端点的这种特殊情况。但是有点复杂了。因为有三个位置(11位,12位,13位)需要考虑。
仅考虑当机器人在第11位的情况(用0代替12位和13位的概率值影响)
[0 0 0 0 0 0 0 0 0 0 0.25*0.25 0.25*0.5 0.25*0.25 0 0 0 0 0 0 0]
现在仅考虑当机器人在第12位的情况(用0代替11位和13位的概率值影响)
[0 0 0 0 0 0 0 0 0 0 0 0.5*0.25 0.5*0.5 0.5*0.25 0 0 0 0 0 0]
现在仅考虑当机器人在第13位的情况(用0代替11位和12位的概率值影响)
[0 0 0 0 0 0 0 0 0 0 0 0 0.25*0.25 0.25*0.5 0.25*0.25 0 0 0 0 0]
因此收到第二个前进命令后的最终概率数组变化为前面这个三种情况的概率数组之和:
[0 0 0 0 0 0 0 0 0 0 0.25*0.25 0.25*0.5 0.25*0.25 0 0 0 0 0 0 0]+[0 0 0 0 0 0 0 0 0 0 0 0.5*0.25 0.5*0.5 0.5*0.25 0 0 0 0 0 0]+[0 0 0 0 0 0 0 0 0 0 0 0 0.25*0.25 0.25*0.5 0.25*0.25 0 0 0 0 0]

后面的变化就更复杂了我们用一段Python代码实现它(检验代码写错了没的标准是20个数加起来是否等于1)。

# -*- coding: utf-8 -*-
"""

@author: 知乎@Ai酱
"""

import numpy as np
prob = np.hstack((np.zeros(10),1,np.zeros(9)))
prob_update = np.zeros(20)
for _ in
  • 22
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: Python是一种高级编程语言,被广泛应用于不同领域的编程任务。Python有许多优点,如易于学习、语法简洁、强大的库和模块等等。对于学习Python编程的人来说,了解Python编程代码大全是非常有帮助的。 Python编程代码大全是指一个集合,其中包含了大量Python编程的示例,覆盖了各种应用场景和功能。例如,在Python代码大全中,你可以找到处理文本数据的代码、处理图像数据的代码、处理音频数据的代码以及计算机视觉和机器学习的代码等等。这些代码不仅可以让你学习Python编程的基础知识,同时也让你掌握了Python编程的高级技巧。 Python编程代码大全可以分为两大类:自己编写的代码和他人编写的代码。自己编写的代码通常是解决实际问题的代码,它们包含了处理数据、文件操作、GUI应用程序和网络编程等等。而从其他人那里获取的代码可以让你学习如何使用Python库和模块,这些代码覆盖了各种应用场景,并且是非常有价值的学习资源。 总之,Python编程代码大全是学习Python编程的必备资源之一。通过阅读这些代码,您可以了解Python编程的基础知识和高级技巧,帮助您在Python编程中更加游刃有余。 ### 回答2: Python编程语言是一种高级编程语言,被广泛应用于数据科学、机器学习、Web开发和自动化等领域。Python的语法简单易懂,而且使用Python编写的代码可读性强,适合初学者快速入门。以下是Python编程代码大全: 1. 获取输入并输出 Python允许获取用户的输入并输出结果。可以使用input()函数获取输入值,输出则使用print()函数。 2. 控制流 循环和条件语句是Python编程控制流的基础。循环可以使用for和while语句,if、else和elif语句则用于条件控制。 3. 列表 列表是Python编程中最常用的数据结构,用于存储多个数据项。列表中的元素可以按照需求添加、删除和修改。 4. 字典 字典是Python编程中的一类数据结构,用于按照键存储和检索值。 5. 函数 Python编程中的函数是一种可重用的代码段,用于执行特定的操作或计算。 6. 类和对象 Python基于面向对象的编程范式,任何Python代码都可以改写为面向对象形式。面向对象编程中的核心是类和对象。 7. 文件操作 Python编程支持对文件进行操作,可以读取、写入和修改文件,还可以控制文件的读写位置。 8. 异常处理 Python编程中,程序在运行时可能会出现错误,此时需要一个机制来捕获和处理异常。Python提供了try、except、finally块来实现异常处理机制。 以上是Python编程代码大全的概述,需要深入理解和运用。Python的强大功能和友好的学习曲线,使得它成为许多领域的首选编程语言之一。 ### 回答3: Python是一种高级编程语言,其代码可读性高、易于理解、易于编写和易于维护。Python开发人员可以利用代码库和框架快速创建各种应用程序,从简单的脚本到大Web应用程序。 Python编程代码大全是一本全面介绍Python编程的书籍。它涵盖了Python编程的各个方面,包括语法,循环和条件语句,函数和模块,面向对象编程,数据库编程,网络编程,GUI编程等等。 这本书中的代码示例非常详细,涵盖了从简单的控制流到高级的数据结构和算法。读者可以通过练习这些示例代码来深入了解Python,并在实践中获得经验。 除了代码示例,Python编程代码大全还包括Python的基本概念和使用技巧,以及一些高级主题,如并发编程和多线程编程。 总之,如果你是一名Python开发人员,Python编程代码大全是一本不可缺少的书籍。它将帮助你建立扎实的Python编程知识基础,并提供可复用的代码示例,使你能够更快速地编写高效稳定的Python应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值