huyutian

他强由他强,清风拂山岗;他横由他横,明月照大江。他自狠来他自恶,我自一口真气足

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  20 随笔 :: 47 文章 :: 22 评论 :: 0 Trackbacks

2015年12月8日 #

HDF5格式非常适合保存层次化的结构数据集合。python下有pytable和h5py两种接口方式支持存储HDF5文件,pandas就支持直接读写pytable。保存数据量不太大(一般控制在2GB以内)的日线分钟线数据用h5格式还是很方便的。pandas在读取h5文件时,可以像数据库一样进行条件检索。详细资料可参考pandas.HDFStore的where参数。要使column可以在where语句中查询,保存数据文件时需要增加index或者明确指定data_columns。但是指定过多的column为data_columns将会使得性能下降
网上搜索后找到了关于pandas存储HDF5文件性能优化的一些建议,原文在这里

1.不使用index,创建出来的HDF文件尺寸会小一些,速度也快一些。
2.通过store.create_table_index() 创建索引,对data_columns进行筛选时的速度没有什么影响。
3.保存HDF时使用压缩选项对数据的读取速度影响很小,但是压缩后,文件尺寸会显著的变小。
使用pandas读写hdf5文件示例如下
#write
store=pd.HDFStore("./data/Minutes.h5","a", complevel=9, complib='zlib')
store.put("Year2015", dfMinutes, format="table", append=True, data_columns=['dt','code'])
# read
store=pd.HDFStore("./data/Minutes.h5","r")
store.select("Year2015", where=['dt<Timestamp("2015-01-07")','code=="000570"'])
posted @ 2015-12-08 16:38 胡雨田 阅读(11888) | 评论 (0)编辑 收藏

2015年3月1日 #

终于搞清楚了为啥我的Ec2108在/etc/init.d/rcS中设置的PATH,启动后莫名的被修改了,原来是/etc/init.d/profile中又把PATH重新设置了,原因记录下来。
【本文为OurUnix--Linux's境原创,转载请注明源地址www.ourunix.org】
这两天在做根文件系统的时候,注意到/linuxrc、/etc/init.d/rcS、/etc/init.d/rc.local、/etc/init.d/profile这几个文件尤其重要,遂把他们记载下来了。
/Linuxrc 执行init 进程初始化文件。主要工作是把已安装根文件系统中的/etc 挂载为ramfs,并拷贝/mnt/etc/目录下所有文件到/etc,这里存放系统启动后的许多特殊文件;接着Linuxrc 重新构建文件分配表inittab;之后执行系统初始化进程/sbin/init。
Linuxrc
#!/bin/sh
echo "mount /etc as ramfs"
/bin/mount -n -t ramfs ramfs /etc
/bin/cp -a /mnt/etc/* /etc
echo "re-create the /etc/mtab entries"
# re-create the /etc/mtab entries
/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/3 /
/bin/mount -f -t ramfs ramfs /etc
exec /sbin/init
etc/init.d/rcS 完成各个文件系统的 mount,再执行/usr/etc/rc.local;通过rcS 可以调用 dhcp 程序配置网络。rcS 执行完了以后,init 就会在一个 console 上,按照 inittab 的指示开一个 shell,或者是开 getty + login,这样用户就会看到提示输入用户名的提示符。
rc.local
/usr/etc/
#!/bin/sh
. /usr/etc/profile
echo "HELLO! Embest"
echo "ifconfig eth0 192.168.0.10"
ifconfig eth0 192.168.0.10 #可自行配置开发板IP
/usr/etc/rc.local 这是被init.d/rcS 文件调用执行的特殊文件,与Linux 系统硬件平台相关,如安装核心模块、进行网络配置、运行应用程序、启动图形界面等。
rcS
/mnt/etc/init.
d/
#!/bin/sh
/bin/mount -a
exec /usr/etc/rc.local
/usr/etc/profile 执行该文件配置需要的环境变量等。
Profile
/usr/etc/
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin ?? 设置命令工具所在位置
posted @ 2015-03-01 19:57 胡雨田 阅读(287) | 评论 (0)编辑 收藏

     最近在写sqilte语句更新数据时发现个问题,那就是Replace into执行时居然会把id主键修改了。google了一下,原来Replace的原理是找到待修改的记录后,整条删除,然后插入新记录。所以这个过程中,默认的id主键会被修改。有时候这种结果并不是我们所想要的,应该如何解决呢?
http://stackoverflow.com/questions/2717590/sqlite-upsert-on-duplicate-key-update这里有很好的讨论。
个人觉得以下方法最好,摘抄如下。
 INSERT OR REPLACE INTO page (id, name, title, content, author)
 SELECT old.id, new.name, new.title, old.content, new.author
 FROM ( SELECT
     "about"           AS name,
     "About this site" AS title,
     42                AS author
 ) AS new
 LEFT JOIN (
     SELECT id, name, content
     FROM page WHERE name= "about"
 ) AS old ON new.name = old.name;
posted @ 2015-03-01 18:12 胡雨田 阅读(552) | 评论 (0)编辑 收藏

     最近在写sqilte语句更新数据时发现个问题,那就是Replace into执行时居然会把id主键修改了。google了一下,原来Replace的原理是找到待修改的记录后,整条删除,然后插入新记录。所以这个过程中,默认的id主键会被修改。有时候这种结果并不是我们所想要的,应该如何解决呢?
http://stackoverflow.com/questions/2717590/sqlite-upsert-on-duplicate-key-update这里有很好的讨论。
个人觉得以下方法最好,摘抄如下。
 INSERT OR REPLACE INTO page (id, name, title, content, author)
 SELECT old.id, new.name, new.title, old.content, new.author
 FROM ( SELECT
     "about"           AS name,
     "About this site" AS title,
     42                AS author
 ) AS new
 LEFT JOIN (
     SELECT id, name, content
     FROM page WHERE name= "about"
 ) AS old ON new.name = old.name;
posted @ 2015-03-01 18:11 胡雨田 阅读(3362) | 评论 (0)编辑 收藏

2015年2月22日 #

ubuntu下安装vmware tools问题
VMware Tools installation cannot be started manually while Easy Install is in progress.

vmware-install.pl
我在虚拟机安装Ubuntu时,无法自动安装VMware Tools,不能全屏显示。
网上搜索解决办法如下,未成功。
在开启虚拟机操作系统的情况下,在虚拟机设置中更改floppy为auto detect。然后点击菜单中的安装VMWare Tools,虚拟操作系统中的光驱里就会有VMWare Tools的安装程序了,自行安装即可
最终解决办法:
在VMware目录(win7下为
C:\Program Files (x86)\VMware\VMware Workstation)下找到linux.iso挂接到Ubuntu虚拟机光驱。在Ubuntu虚拟机中解压光盘安装包,启动终端程序,进入VMware-tools-distrib目录,运行sudo perl vmware-install.pl

debian下安装vmware tools问题
debian下按照上面的方法安装虚拟机是不能成功的,会显示错误
"The path "usr/bin/gcc" is not a valid path to the gcc binary path" 
"The path "" is not a valid path to the 2.6.32-5-686 kernel header"
原因是vmware tools需要搜素gcc编译器和linux内核版本。解决办法是
uname -r
显示2.6.32-5-686
然后安装头文件
apt-get install linux-headers-2.6.32-5-686
安装编译环境
apt-get install make
apt-get install build-essential
然后再重复上面Ubuntu的安装过程
先用df命令确定光盘mount位置

我的光盘位置/media/cdrom0
cd /tmp
tar zxpf /mnt/cdrom/VMwareTools-8.8.0-47126.tar.gz
cd vmware-tools-distrib
./vmware-install.pl
然后安装时一路回车,使用默认选项就ok
posted @ 2015-02-22 12:28 胡雨田 阅读(787) | 评论 (0)编辑 收藏

2014年12月28日 #

内联函数能够提高程序性能这是大家都知道的。但内联函数应该怎样申明和定义呢?今天我就遇到一个"unresolved external" 错误。google后找到答案。

t's imperative that the function's definition (the part between the {...}) be placed in a header file, unless the function is used only in a single .cpp file. In particular, if you put the inline function's definition into a .cpp file and you call it from some other .cpp file, you'll get an "unresolved external" error from the linker.

内联函数体必须定义在头文件中,除非你的程序只有单一cpp文件。如果你在一个cpp文件中定义内联函数体,而要从其他cpp文件访问该内联函数,你就会在link时遇到"unresolved external" 错误。原文链接看这里
posted @ 2014-12-28 16:04 胡雨田 阅读(435) | 评论 (0)编辑 收藏

2014年2月4日 #

最近重新安装系统,选择自定义安装office,本意是想尽量精简掉一些用不上的内容,结果不小心给自己添麻烦了。
安装完后,用WORD打开文档时,总是提示:此文档有宏,该应用程序的宏语言支持功能被取消。功能要求的VBA不可用。如果关闭文档退出还会提示:
所做更改会影响共用模板NORMAL
网上查找了一番, 解决办法有两个:
1.打开文档时,进入“开始”-“选项”-“加载项”-“管理COM加载项”,将三个可用加载项前的打勾去掉。
2.用office安装盘重新安装-“添加/删除功能”-“自定义安装”-“OFFICE 共享功能”下,安装“VBA数字工程证书”和“Visual Basic for Applications”
 方法1临时用用可以,但解决不了问题。最后还是选修复安装搞定。
posted @ 2014-02-04 08:35 胡雨田 阅读(1271) | 评论 (0)编辑 收藏

2013年10月8日 #

我自己使用已经有一阵子了,感觉非常不错。MadEdit是一款用wxWidgets和c++写的开源软件,可以跨平台工作。
主要特点:
1.免费、开源、小巧,精致,绿色便携
2.支持16进制编辑,这个用于分析一个未知文件的文件存储结构,非常方便。对程序调试、底层开发的人非常适合。以前大家都用ultraedit,但随着版本的升级,变得越来越庞大,已经不适合我这种偶尔玩玩编程的人了。
3.支持c/c++/java/html/python等数十种语言语法高亮度显示。那么如果你时不时的需要写写小程序,那么它就非常适合你。
4.支持正则表达式。最近突然觉得正则表达式在查找替换一些特使场合还是非常好用的,效率非常高。一般并不需要掌握复杂的正则表达式规则。
比如,我有一个大文件有很多处"01.","02.","03."之类文本的要删除,这时候[0-9][0-9]\.就能快速搞定。
5.自身支持设置添加到资源管理器右键菜单中去,windows系统用户的最爱。
6.中文/英文界面随意切换,支持gbk/unicode编码格式,还内置繁简转换功能。这这简直就是为中国人专用的编辑器么。完全可以把Notepad,Note++之类仍掉了。
用一句时髦话形容:低调奢华有内涵,你值得拥有。
唯一的缺点就是目前原作者很久没有更新程序了,但好消息是,有几个爱好者开源了另一个给madEdit打补丁的项目,可以去看看。
madEdit的原网址在这里http://sourceforge.net/projects/madedit/
这里是爱好者修改的打补丁版本,注意也是开源的哟。https://code.google.com/p/madedit-pv/
从后一个网址下载时,MadEdit20130705.7z是单个主程序,不需安装可以直接运行。中文用户建议最好再下载一个中文化配置文件syntax_locale.7z,解压到同一个目录中即可。
posted @ 2013-10-08 20:30 胡雨田 阅读(6194) | 评论 (0)编辑 收藏

2012年10月6日 #

以前用visual studio 2008时也碰到过类似问题,问题产生的原因就是由于一个Solution下单多个Project是分开编译的,主项目和子项目的pdb文件名相同(默认都是vc90.pdb或vc100.pdb)从而造成冲突。这个问题对程序的执行不会产生影响,但会导致丢失部分调试信息。
在网上搜到解决办法,修改pdb文件设置的路径和名称。转贴于此。

Project Configuration Properties -> C/C++ -> Output Files
Program Database File

This name, e.g. $(IntDir)\vc90.pdb, is embedded into the object file and it should be the same as the one in

Project Configuration Properties -> Linker -> Debugging
Generate Program Database File

This is, e.g. $(TargetDir)$(TargetName).pdb

Now the object file contain the path where the library is located, too.


由此引出一个话题,那就是对于分开编译的多个Project组成的一个复杂的Solution如何组织目录文档结构,既保持各个Project相对独立,同时又保证整个Solution调试信息的完整性。我的解决办法是:首先肯定要像上面一样修改各单独Project的pdb的路径和文件名。其次在复制Project编译结果到Solution的Lib时,要把所有的obj文件和pdb文件一起copy过来。要注意单独的Project编译的obj文件和pdb文件路径最好相同,而且使用相对路径"..\"和“.\"打头。文件复制工作可以写成一个批处理,放入主Solution的Pre-Build Event中去。

posted @ 2012-10-06 23:27 胡雨田 阅读(22010) | 评论 (2)编辑 收藏

2012年4月8日 #

折腾了好久才发现开源库TA-LIB关于很多指标计算都与国内通用股软不太一样。刚开始还以为是自己的程序写错了,汗一个。
比如ATR的计算,国内一般是取TR(真实波幅)的简单平均。而TA-LIB则是采取类似EMA平均一样的方法求TR的平均值。
再如MACD(12,26,9)的计算,TA-LIB对于前33个初始值是未定义的,国内股软计算初始值时则是根据已有的几根bar计算的
平均值比照MACD公式进行换算的。自己利用TA-LIB库开发股软时一定要对比一下指标的计算异同,否则浪费时间就划不来了。
posted @ 2012-04-08 11:31 胡雨田 阅读(8770) | 评论 (1)编辑 收藏

仅列出标题  下一页