PT's Blog

嗷嗷嗷嗷嗷嗷嗷嗷

**如何从Python中导出".mat"文件**
很多时候,需要将Python之中处理过的数据导出为.mat文件中的矩阵,供Matlab使用。这个时候可以使用scipy的sio模块,这个模块的全称是:File IO ([scipy.io](http://docs.scipy.org/doc/scipy/reference/io.html#module-scipy.io))。

目前支持这些类型的文件的读写

  • Matlab files(*.mat)
  • Matrix Market files(*.mtx)
  • WAV files(*.wav)
  • Arff files, arff is a simple file format which support numerical, string and data values. It supports sparse data too, see http://weka.sourceforge.net/wekadoc/index.php/en:ARFF_(3.4.6) for more info. scipy.io对这个模块只支持读
  • NetCDF这里呼应标题,只讲如何存数据到Matlab中的数组,给一个例子吧
    01 # -*-   encoding : utf8   -*-
    02 import os
    03 import scipy.io as sio
    04 from wfdbtools import rdsamp, rdann
    05 
    06 # 为了处理命令行选项
    07 from optparse import OptionParser
    08 # 命令行选项
    09 parser  = OptionParser(version="%prog 0.1",\
    10                        usage="python %prog [options]")
    11 
    12 parser.add_option("-i", "--in", action="store", \
    13         dest="IN", \
    14         default="All/106", \
    15         help="whether output binary frames into file.")
    16 
    17 parser.add_option("-s", "--start", action="store",\
    18         type="int", dest="START",\
    19         default="0", \
    20         help="start time [default=0]")
    21 
    22 parser.add_option("-e", "--end", action="store",\
    23         type="int", dest="END",\
    24         default="-1",\
    25         help="end time [default=-1]")
    26 
    27 parser.add_option("-o", "--out", action="store",\
    28         type="string", dest="OUT",\
    29         default="Data.mat",\
    30         help="output file name [default=Data.mat]")
    31 
    32 (options, args) = parser.parse_args()
    33 
    34 def main():
    35     '''
    36         idiot comment
    37     '''
    38     # read data from sample files
    39     data, info = rdsamp(options.IN, options.START, options.END)
    40     ann = rdann(options.IN, 'atr', options.START, options.END)
    41     start   = int(data[0,0])
    42     p       = 0
    43     # list of NOR points
    44     ln  = list()
    45     # list of PVC points
    46     lp  = list()
    47     for d in ann:
    48         p = int(d[0]) - start
    49         if int(d[2]) == 5:
    50             lp.append(data[p-36:p+55, 2])
    51         elif int(d[2]) == 1:
    52             ln.append(data[p-36:p+55, 2]) 
    53     # write data to mat file
    54     l_dic   = dict()
    55     for i in range(len(lp)):
    56         l_dic["PVC"+str(i)] = lp[i]
    57     for i in range(len(ln)):
    58         l_dic["NOR"+str(i)] = ln[i]
    59     # write ann
    60     sio.savemat("ANN_" + options.OUT, {'ANN':ann}, oned_as='column')
    61     sio.savemat(options.OUT, l_dic, oned_as='row')
    62 
    63 if __name__ == "__main__":
    64     main() 
    这个例子是从MIT-BIT数据库中把数据倒出为mat文件中的数组的,其实只要关注带有sio.savemat函数的那两行(6061两行),这个函数的用途在于可以吧Python中的dict数据存入到mat文件中。

它的第一个参数是输出的mat文件的文件名(带扩展名),第二个参数是将要被存储的dict数据,第三个参数有两个可选的选项”row”和”column”,也就是对一维的数据(比如list)是为mat文件中的1N矩阵还是N1矩阵。

如何在Python中读入”.mat”文件

如上文所说,这个时候你也需要scipy.io,不同的是,调用loadmat函数而已。详细使用方法请参见: scipy.io.loadmat

最近莫名奇妙的突然突入到各式各样的领域中,比如生成条形码,识别条形码,编造、解析GPS帧格式,经纬度与直角坐标变换,小波变换求特征值,心电图数据查询…

然后觉得应该把这些东西记下来

What is ZBar?
ZBar is a bar code scanning and decoding library.

ZBar支持识别二维条形码,纯C实现(可选C++封装),提供了C/C++、python、perl语言的接口,可以用在iPhone上…

在官方wiki页面(http://sourceforge.net/apps/mediawiki/zbar/index.php?title=HOWTO:_Scan_images_using_the_API)有详细的用法

话说这个库什么都好,就是wiki里面提供的例子全是用的Magick++,用Windows平台+VC6的童鞋可能要郁闷了。

其实不用Magick++也是可以的,ZBar的文档说传给parser处理的图片的格式最好是Y800(http://fourcc.org/yuv.php#Y800)的,使用OpenCV的函数cvCvtColor(cimg,gimg,CV_BGR2GRAY)也是可以搞定的,不相信的童鞋可以去看看这个函数的文档,对比一下CV_BGR2GRAY生成的图像是不是就是Y800格式

如果是在Linux下面,还是用Magick++比较好

RT,看完化物语才突然想起,原来来南京这么多年了,夜空总是见不着星星的。滑稽啊,紫荆山天文台

回想在家乡的时候满天的银河,清澈的河水,南京在自然环境方面真实烂透了。于是我只能每天面对我的20寸镜面屏

还是二次元好

这里要介绍的方法是update-alternatives[准确的说,应该是伟大的debian发行版的成员]。
man update-alternatives就会知道:

update-alternatives - maintain symbolic links determining default commands要改大便系统的gcc版本,首先就需要把对应版本的gcc给装上[这个命令大家都知道吧],假设原来系统的gcc版本是4.3,然后你新装了4.1的,那么输入如下命令:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 40
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.1 30
sudo update-alternatives --config gcc

现在,你需要的仅仅是按照提示将gcc默认指向的文件从4.3改为4.1即可。话说以前我都是直接改链接的,总觉得有点脏…

就是将/bin/sh重新指向/bin/bash。比较干净的步骤是依次执行如下三条命令:

sudo update-alternatives --install /bin/sh sh /bin/bash 40
sudo update-alternatives --install /bin/sh sh /bin/dash 30
sudo update-alternatives --config sh

然后按提示选择将sh重新指向bash即可

为什么要这么做?
为了在编译各类源码包的时候不要遇见由于操蛋的dash而引发的各式各样稀奇古怪的错误**
**

0%