PyBayes 主页 文档

PyBayes is an object-oriented Python library for recursive Bayesian estimation (Bayesian filtering) that is convenient to use. Already implemented are Kalman filter, particle filter and marginalized particle filter, all built atop of a light framework of probability density functions. PyBayes can optionally use Cython for large speed gains (Cython build can be several times faster in some situations).

  1. 安装

可以通过pip install -U PyBayes安装。

如果失败可以考虑手动下载源码,自己安装。

安装过程中,Cython编译可能失败。使用下面的命令安装,可以避免Cython编译加速:

python ./setup.py --use-cython=no install

  1. 主要功能

Kalman filter, particle filter and marginalized particle filter

  1. 遇到的问题

在执行python pybayes.GaussPdf(np.array([0.0, 0.0]), np.array([[200.0, 0.0],[0.0, 200.0]]))时报错:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Anaconda\lib\site-packages\pybayes\pdfs.py", line 548, in __init__
self._set_rv(mean.shape[0], rv)
File "D:\Anaconda\lib\site-packages\pybayes\pdfs.py", line 418, in _set_rv
return self._set_rvs(exp_shape, rv, 0, None)
File "D:\Anaconda\lib\site-packages\pybayes\pdfs.py", line 379, in _set_rvs
self.rv = RV(RVComp(exp_shape)) # create RV with one anonymous component
File "D:\Anaconda\lib\site-packages\pybayes\pdfs.py", line 46, in __init__
raise TypeError("dimension must be integer (int)")
TypeError: dimension must be integer (int)

应该是跟1.9版本的NumPy不太兼容,NumPy的shape([1,2,3])返回的是(3L,),是长整型,所以修改pybayes的...\lib\site-packages\pybayes\pdfs.py文件的45行:

#if not isinstance(dimension, int):
if not isinstance(dimension, long):
  1. 简单实例

一维卡尔曼和简单界面

#coding=utf8

import sys
from PySide.QtCore import *
from PySide.QtGui import * import pybayes as pb
import numpy as np _A=np.array([[1.]])
_C=np.array([[1.]])
_Q=np.array([[1.]])
_R=np.array([[1.]])
s_pdf=pb.GaussPdf(np.array([1.]), np.array([[1.]]))
kf=pb.KalmanFilter(A=_A,C=_C,Q=_Q,R=_R,state_pdf=s_pdf)
p=kf.posterior() def update(x):
kf.bayes(np.array([x]))
return p.mean()[0],p.variance()[0] class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(320, 205)
self.pushButton = QPushButton(Dialog)
self.pushButton.setGeometry(QRect(210, 160, 75, 25))
self.pushButton.setObjectName("pushButton")
self.textBrowser = QTextBrowser(Dialog)
self.textBrowser.setGeometry(QRect(10, 10, 300, 131))
self.textBrowser.setObjectName("textBrowser")
self.textEdit = QTextEdit(Dialog)
self.textEdit.setGeometry(QRect(35, 160, 100, 25))
self.textEdit.setObjectName("textEdit") self.retranslateUi(Dialog)
QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog):
Dialog.setWindowTitle(QApplication.translate("Dialog", "卡尔曼滤波器", None, QApplication.UnicodeUTF8))
self.pushButton.setText(QApplication.translate("Dialog", "更新", None, QApplication.UnicodeUTF8)) class MainUi(QDialog,Ui_Dialog):
def __init__(self,parent = None):#parent默认为0
super(MainUi,self).__init__(parent)#固定形式 self.setupUi(self)
self.connectSlot() def connectSlot(self):#连接逻辑和界面
#self.textEdit.textChanged.connect(self.changeWord)#同步textEdit和textBrowser的内容
self.pushButton.clicked.connect(self.changeWord) def clearText(self):
self.textEdit.setText("") def changeWord(self):#更改textBrowse显示内容
mean,var=update(float(self.textEdit.toPlainText()))
_text = u"<font color = blue>滤波值:%f<br />方差:%f</font>"%(mean,var)
self.textBrowser.setText(_text) def main():
app = QApplication(sys.argv)
ui = MainUi()#没有给parent赋值
ui.show()
sys.exit(app.exec_()) if __name__ == '__main__':
main()

PyBayes的安装和使用的更多相关文章

  1. docker——容器安装tomcat

    写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...

  2. 网络原因导致 npm 软件包 node-sass / gulp-sass 安装失败的处理办法

    如果你正在构建一个基于 gulp 的前端自动化开发环境,那么极有可能会用到 gulp-sass ,由于网络原因你可能会安装失败,因为安装过程中部分细节会到亚马逊云服务器上获取文件.本文主要讨论在不变更 ...

  3. Sublime Text3安装JsHint

    介绍 Sublime Text3使用jshint依赖Nodejs,SublimeLinter和Sublimelinter-jshint. NodeJs的安装省略. 安装SublimeLinter Su ...

  4. Fabio 安装和简单使用

    Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...

  5. gentoo 安装

    加载完光驱后 1进行ping命令查看网络是否通畅 2设置硬盘的标识为GPT(主要用于64位且启动模式为UEFI,还有一个是MBR,主要用于32位且启动模式为bois) parted -a optima ...

  6. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  7. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  8. 【原】nodejs全局安装和本地安装的区别

    来微信支付有2年多了,从2年前的互联网模式转变为O2O模式,主要的场景是跟线下的商户去打交道,不像以往的互联网模式,有产品经理提需求,我们帮忙去解决问题. 转型后是这样的,团队成员更多需要去寻找业务的 ...

  9. tLinux 2.2下安装Mono 4.8

    Tlinux2.2发行版基于CentOS 7.2.1511研发而成,内核版本与Tlinux2.0发行版保持完全一致,更加稳定,并保持对Tlinux2.0的完全兼容.Mono 4版本要求CentOS 7 ...

随机推荐

  1. Linux卸载系统自带的httpd的方法

    卸载linux自带的httpd服务: 方法一: #rpm -e httpd 结果,出现以下错误 httpd-mmn = 20020628 is needed by (installed) mod_pe ...

  2. Retrofit2 源码解析

    原文链接:http://bxbxbai.github.io/2015/12/13/retrofit2-analysis/ 公司里最近做的项目中网络框架用的就是Retrofit,用的多了以后觉得这个框架 ...

  3. BeanFactory 和 ApplicationContext

    Spring通过一个配置文件描述Bean及Bean直接的依赖关系,利用Java语言的反射功能实例化Bean并建立Bean之间的依赖关系.Sprig的IoC容器在完成这些底层工作的基础上,还提供了Bea ...

  4. 关于ssh的一篇很好的文章

    源地址:http://www.w3hacker.com/?p=156   ssh-agent的manual写得倒是挺详细,可看了好几次都没怎么搞明白.08年在网上找到了非常好的一篇文章,An Illu ...

  5. .net通过获取客户端IP地址反查出用户的计算机名

    这个功能看似很少用到,但又非常实用,看似简单,但又在其中存在很多未知因素造成让人悲痛莫名的负能量... 这是公司内部最近在使用的功能,因为是DHCP,所以有时会根据计算机名做一些统计和权限的设置. 也 ...

  6. java23中设计模式

    原文来自:http://zz563143188.iteye.com/blog/1847029 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design patt ...

  7. struts2中利用POI导出Excel文档并下载

    1.项目组负责人让我实现这个接口,因为以前做过类似的,中间并没有遇到什么太困难的事情.其他不说,先上代码: package com.tydic.eshop.action.feedback; impor ...

  8. RecyclerView(4)简单示例

    1,RecyclerViewFrgmt import com.example.adapter.R; import android.app.Fragment; import android.os.Bun ...

  9. MyEclipse开发WebService教程

    . 创建一个 webService 工程. 2. 创建一个普通 Java 类   3. 创建 webService 服务端 HelloJaxwsDelegate.java 的源代码如下:   4. 导 ...

  10. unity3d5.2.3中 调整视角

    按住alt键不放,然后左边的手的图标会变成一个眼睛,在Scene中移动.就会发现可以调整视角了