c++和MATLAB一起科研注意事项


科班出身,习惯了C/C++的精准直观的语法,而且,在算法设计阶段,依托直接的内存操作和多变的数据结构做算法设计有着very nice的优势。但是MATLAB又是一把科研利器(写c++时内心活动:我的代码好骚啊!写MATLAB时内心活动:卧槽真简单)。因为不习惯用MATLAB做算法,而且说真的MATLAB做出来最后不还是要生产力工具重新写一遍。。。更何况,有些情况下,MATLAB里面优化的算法投入应用说不准还是负优化(不过再次强调,做验证是真的方便),MATLAB和生产力工具不一定兼容。比如:虽然MATLAB安装路径里面藏了一个阉割的opencv,但是hough线检测却和opencv里面的HoughLines不一样,可以参考我这篇博文 这里,当初MATLAB验证完发现我需要改opencv源码才能实现相同的效果,惊了。本篇可能会不定期更新内容。

1. c++处理出数据目前(2018年11月6日10:54:36)我采用txt文本形式写成文件,再通过load读取

  • 目前只用到了简单的矩阵和数字的交换,所以用文本读写还能满足要求。当然,如果是图片文件当然是以读写图片文件的形式。
  • MATLAB的load()函数不会读取被"%"注释起来的行,可以在读写文件过程中用来说明文件数据内容和含义,而不会影响数据的读写。再也不用起一个巨长的文件名啦。

2.MATLAB骗人

用imhist()画出来的图像直方图和自己一个个像素统计出来的结果再plot竖线图出来(柱状图用的bar())的结果不一样。在某一个灰度级灰度很多,情况下,也就是某一列值远超其他所有的时候,MATLAB会放大其他列,其实就是直接砍掉了最高列,最高列依然是最高,但是灰度间的比例关系是不对的。实测。如下(分别是原图、MATLAB的imhist()的结果和手动(自动,循环遍历)统计像素数然后bar()出来的效果):
Skeleton原图
MATLAB的imhist结果
bar出来的统计结果
可以明显看出来,在MATLAB出来的直方图效果图上,除灰度0外。其他的灰度所占比例相对下面统计出来的实际值相比,显示的效果上是更加高了。但是放大再看,灰度0的值又变得很高。也就是说,默认情况下,MATLAB会修改实际数据来让看的数据更轻松但是会修改数据本身的相对其他数据的显示比例。(简单地说就是缩小了极大值的显示效果。)

3.人生苦短,我用Python

Life is short,you need Python。
老实说在接触深度学习之前我是没用python的,后来发现了新大陆。
Python有什么特点呢?

  1. 首先,它是一门正经的编程语言。Matlab不正经,因为它下标不是从0开始。
  2. 运行环境足够轻量,支持广泛,小到树莓派,达到并发的服务器集群都可以用。
  3. 正经的第三方包巨多,是一个正经的生产力工具,可以方便实现指定的需求,包含丰富的网络、文件、处理接口,是一个正经的能接触系统级资源的语言,甚至可以代替shell,因为我不会shell。
  4. 语言足够简单,甚至不用学,比如:“list = [d for d in list if ‘guanjianzi’ in d]”
  5. 语言足够反程序员,甚至刚开始有点懵逼,比如实现一个筛选居然是:“list = [d for d in list if ‘guanjianzi’ in d]”
  6. 当我自己在家有了一个一直运行的台式机,远程putty, python 真好,直接tmux 然后conda activate
  7. 但是它没有真正意义的多线程,球球py4出真正的多线程吧,哪怕是用一个接口控制默认关闭也好,让我们这些有信心写好多线程的人发挥一下,我CPU12线程啊就跑一个逻辑核是不是太浪费了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值