zoukankan      html  css  js  c++  java
  • PyBayes的安装和使用

    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:Anacondalibsite-packagespybayespdfs.py", line 548, in __init__
        self._set_rv(mean.shape[0], rv)
      File "D:Anacondalibsite-packagespybayespdfs.py", line 418, in _set_rv
        return self._set_rvs(exp_shape, rv, 0, None)
      File "D:Anacondalibsite-packagespybayespdfs.py", line 379, in _set_rvs
        self.rv = RV(RVComp(exp_shape))  # create RV with one anonymous component
      File "D:Anacondalibsite-packagespybayespdfs.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的...libsite-packagespybayespdfs.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()
    
  • 相关阅读:
    linux学习之uniq
    hive学习05 参数设置
    【python】调用sm.ms图床api接口,实现上传图片并返回url
    【python】列表与数组之间的相互转换
    更新yum源
    要把RAID5创建卷组
    named-checkconf -z /etc/named.conf
    function_exists
    trigger_error
    命名空间
  • 原文地址:https://www.cnblogs.com/catmelo/p/4166070.html
Copyright © 2011-2022 走看看