- 浏览: 679452 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (181)
- Matlab (16)
- Java (26)
- autoHotkey (4)
- openCV (1)
- C++ (50)
- PDF-XChange Viewer (2)
- 学术 (11)
- javascript (4)
- linux (11)
- SWT (9)
- latex (7)
- GAE (2)
- windows (6)
- C# (3)
- PS (20)
- JNI (4)
- latex,批处理 (0)
- 批处理 (4)
- Android (5)
- 矩阵论 (1)
- SVM (1)
- 概率图模型 (0)
- Python (12)
- Eigen (5)
- 编程题 (1)
- MKL (1)
- 神经网络 (9)
- 最优化 (2)
- 摄影 (1)
- PPT (0)
- After Effects (3)
- CUDA (3)
- caffe (0)
- MXNet (2)
- svn (1)
- R (0)
- 虚拟机 (0)
- tensorflow (7)
- theano (1)
- Keras (1)
- vim (1)
- xgboost (1)
- spark (6)
- eclipse (2)
- word2vec (0)
- hadoop (1)
- dmlc (1)
- git (0)
最新评论
-
jeffersonz:
请问大神,这个插件记录下来的脚本为什么不能再Extendscr ...
PhotoShop - 记录PS的所有操作为JavaScript代码 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道cherish ...
Eigen的编译选项;MKL的使用 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道 您好,您的工 ...
Eigen的编译选项;MKL的使用
在matlab,C++联合编程的过程中,想使用一下Eigen库(一个C++矩阵运算库)。
为啥不直接用matlab的库呢?
有两点考虑:
不多说了,上代码:
以下是将matlab矩阵转为Eigen中的Map(可以当做矩阵使用)的函数,转为Map而不是Matrix是为了避免不必要的数据拷贝(Eigen的数据共享实在是烂的可以!)
其实就是一行函数而已,也就是Eigen中Map 的基础用法。更多用法参见:http://eigen.tuxfamily.org/dox/group__TutorialMapClass.html
其中的一行用于指定间隔的(注意这里列间距为1(更准确说是外间距,因为矩阵为列优先存储的,外间距为列间距),行间距为4,但矩阵是列优先存储的!也就是说,M(r,c)的计算方法为: M(c*1+r*4);)
如果是常用的写法:
或者展开写:
M(r,c)的计算方法为: M(c*4+r*1)
附上完成的测试代码(两个矩阵相加):
为啥不直接用matlab的库呢?
有两点考虑:
- 1、matlab中写for循环太慢,处理图像块有时还得两层for循环
- 2、在C++中采用matlab函数,不利于生成独立的C++程序。
不多说了,上代码:
以下是将matlab矩阵转为Eigen中的Map(可以当做矩阵使用)的函数,转为Map而不是Matrix是为了避免不必要的数据拷贝(Eigen的数据共享实在是烂的可以!)
namespace Eigen { template<typename T> Map<Matrix<T, Dynamic, Dynamic, ColMajor>> matlab2Eigen (const mxArray * pMat, bool needTranspose = true) { Map< Matrix<T, Dynamic, Dynamic, ColMajor>> matrixMap ( (T*) mxGetPr (pMat), mxGetM (pMat), mxGetN (pMat) ); return matrixMap; } }
其实就是一行函数而已,也就是Eigen中Map 的基础用法。更多用法参见:http://eigen.tuxfamily.org/dox/group__TutorialMapClass.html
其中的一行用于指定间隔的(注意这里列间距为1(更准确说是外间距,因为矩阵为列优先存储的,外间距为列间距),行间距为4,但矩阵是列优先存储的!也就是说,M(r,c)的计算方法为: M(c*1+r*4);)
Map<Matrix<int,2,4>, Unaligned, Stride<1,4> >(array) ;
如果是常用的写法:
Map<Matrix<int,2,4>>(array) ;
或者展开写:
Map<Matrix<int,2,4>, Unaligned, Stride<0,0> >(array) ;
M(r,c)的计算方法为: M(c*4+r*1)
附上完成的测试代码(两个矩阵相加):
#include <Eigen/Core> //mex headers and libraries #include "mex.h" #pragma comment(lib,"libmx.lib") #pragma comment(lib,"libmex.lib") #pragma comment(lib,"libmat.lib") namespace Eigen { template<typename T> Map<Matrix<T, Dynamic, Dynamic, ColMajor>> matlab2Eigen (const mxArray * pMat, bool needTranspose = true) { Map< Matrix<T, Dynamic, Dynamic, ColMajor>> matrixMap ( (T*) mxGetPr (pMat), mxGetM (pMat), mxGetN (pMat) ); return matrixMap; } } //define function name in the DLL #pragma comment(linker,"/EXPORT:mexFunction") //保证了DLL导出的函数名未经过修改,等效于使用.def文件 void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { /* 检查输入输出变量的个数 */ if (nrhs != 2) mexErrMsgTxt ("Two inputs required."); else if (nlhs > 2) mexErrMsgTxt ("Too many output arguments"); auto m1 = Eigen::matlab2Eigen<double> (prhs[0]); auto m2 = Eigen::matlab2Eigen<double> (prhs[1]); if (m1.rows() != m2.rows() || m1.cols() != m2.cols() ) mexErrMsgTxt ("two matrix must be the same size."); /* 为返回参数创建矩阵 */ plhs[0] = mxCreateNumericMatrix (m1.rows(), m1.cols(), mxDOUBLE_CLASS, mxREAL); auto m3 = Eigen::matlab2Eigen<double> (plhs[0]); m3 = m1 + m2; }
发表评论
-
C++函数中的静态变量
2019-07-19 11:22 762在C++中,可以在成员函数中使用静态变量,从而间接达到在hpp ... -
tensorflow 静态编译笔记 -- linux系统
2018-11-05 14:26 0注: 1、编译tensorflow静态库 很简单,参见: h ... -
gperftools笔记
2018-06-27 14:30 0export LD_LIBRARY_PATH=LD_LIBR ... -
dmlc分布式线性模型编译笔记
2018-06-06 10:37 21051、使用第三方修改后的wormhole工程 原始工程wor ... -
C++中读取控制台输出,并将文件指针FILE*转换为istream
2017-11-27 15:03 1707解决的问题: 1、通过执行系统的bash命令后,获取其输出( ... -
c++中使用boost库在共享内存中存储map
2017-11-09 11:37 5121boost库中的interprocess包可以在共享内存中创建 ... -
近似最近邻算法库FLANN
2017-04-25 18:45 0FLANN库是计算近似最近邻的库, 问题定义如下: 给定距离函 ... -
C++杂记-- 重定向std::cout等
2017-04-18 17:28 18881、屏蔽std::cout 参见:http://stackov ... -
CMake指定目标代码的平台(win32,x64)
2016-06-03 20:54 11534主要参考自:http://blog.c ... -
windows 10下安装GPU版MXNet
2016-06-03 21:28 8527上回说到编译CPU版的MXNet: http://cheris ... -
windows下安装CPU版mxnet
2016-05-23 23:14 17487MXnet (mix net)类似Caffe,Tensorfl ... -
Matlab中的面向对象编程
2015-12-20 22:43 2632官方文档:http://cn.mathwo ... -
Linux C++编译及 静态/动态 链接库 笔记
2015-12-20 19:49 59861、C++文件的编译 g++参 ... -
matalb中struct的诡异构造方式
2015-12-16 19:37 1034读MatConvNet代码时被struct坑了,特此记录!!! ... -
Linux (Ubuntu) 下 Eclipse C++ 环境配置
2015-12-08 21:49 19201、安装JDK 参见http://blog.csdn.net/ ... -
Photoshop插件开发-filter
2015-10-11 22:53 3310初学,,感觉PS插件的文档很烂,,教程也很少,,也就这么简单学 ... -
使Visual Assist X支持CUDA的.cu文件的代码提示
2015-07-17 00:05 2227现在安装CUDA很方便了,直接支持Visual Studio。 ... -
CUDA程序block和thread超出硬件允许值时的异常
2015-07-13 11:32 3681调用CUDA的核函数时指定block 和 thread大小,该 ... -
MatConvNet的excise 3改为网络配置文件形式
2015-06-30 11:28 2924MatConvNet为vlFeat作者写的matlab下的卷积 ... -
matlab下GPU编程笔记
2015-06-27 18:00 2641不多说,直接上代码 gpuDevice % 查看系统中 ...
相关推荐
近需要用 C++ 做一些数值计算,之前一直采用Matlab 混合编程的方式处理矩阵运算,非常麻烦,直到发现了 Eigen 库,简直相见恨晚,好用哭了。 Eigen 是一个基于C++模板的线性代数库,直接将库下载后放在项目目录下,...
本文主要讲解利用Eigen库计算矩阵的特征值及特征向量并与Matlab计算结果进行比较。 C++Eigen库代码 #include #include <Eigen> #include <Eigen> using namespace Eigen; using namespace std; void Eig() { ...
C++的矩阵库——EIGEN,通过这个矩阵库,可以很方便的使用matlab的矩阵计算
这是我在做项目时,给下一届接手的人写的一个关于Eigen库的快速上手手册,主要是针对于项目的应用来写的。当时使用Eigen库的目的是,将Matlab写的,LPCC和MFCC两种声音识别算法...下面就是关于Eigen矩阵库的使用说明。
Eigen是一个非常实用的C++矩阵运算库,其只需要包含头文件,而且功能强大、矩阵运算效率高,C++配上Eigen之后,使用起来的方便程度可以和matlab媲美。这个文档给出了很多使用Eigen的实用技巧。
用matlab求邻接矩阵代码 DMRG Matlab code of DMRG on 1D Heisenberg Model ...求基态也是用matlab内置的eigen函数,没用Lanzos。 ps 代码中的中文备注不知道为啥网站上显示乱码,下载再看可能没问题。
Gmp Eigen Matrix (GEM) 库为 matlab 带来了密集和稀疏的高精度矩阵。 得益于涵盖基本矩阵代数、标准特征值分解、奇异值、基本线性系统求解等的众多重载,您可以在仍然使用常用的 matlab 函数的同时受益于任意精度...
11单文件头,用于在matlab数据文件中读写矩阵。 它使用该库作为后端。 本征梅西格(MexEig) 用于包含在mex文件中的C ++ 11单文件头,可以简单地将本征矩阵与mxArray结构相互转换。 概述 MexEig中有两个功能: ...
此程序为用matlab编写的基于最小二乘法通过求解广义矩阵特征值及特征向量进行椭圆曲线拟合程序。 程序中x,y分别为采样点的横纵坐标。生成的结果矩阵为椭圆曲线aX^2+bXY+cY^2+dX+eY+f=0中的各项系数。
一个非常方便的 C++ 矩阵运算库,在项目中配置非常轻便。 使用了之后可以兼顾MATLAB的便捷和C++的效率。
matlab自动代码生成变量KMeansRex:使用Eigen矩阵模板库对K-Means进行快速C ++实现,并带有Matlab和Python / Numpy的钩子 该工具箱是k-means实现的暴君蜥蜴之王。 它的速度至少是matlab和scipy提供的本地kmeans实现...
eigen-3.3.7.zip
程序使用 QR 分解计算矩阵的特征值。 运行程序,然后按照屏幕上的说明进行操作。 输出将是相应矩阵的特征值,以及收敛标准的信息。
matcom 2.C++矩阵运算库:Eigen3 3.C++矩阵运算库:OpenCV 4.C++矩阵运算库:ViennaCL 5.C++矩阵运算库:Armadillo)最后才发现好像只有Matcom支持vc6.0,并且已经被matlab收购,只能去扒拉老版本的拿来用。...
Eigen库为是一个矩阵运算的库,实现Matlab仿真中的各种矩阵运算,我用过特征值分解eig,奇异值分解SVD,对角阵,行,列最大,等等。Matlab可以实现的这里几乎都有,使用方法见本博客中的介绍
Eigen是一个高层次的C ++库,有效支持 得到的线性代数,矩阵和矢量运算,数值分析及其相关的算法。
此 MATLAB 函数是一种算法,旨在改进 Wishart 分布的协方差矩阵的特征值估计并根据特征值重新计算改进的协方差矩阵。 该函数是 Avishai Ben-David 和 Charles E. Davidson 开发和发布的程序的实现,“来自有限样本...
eigen3 使用2019/12最新的eigen3版本(eigen3-latest)编译, 编译方法使用cmake3+vs2017 由于网上基本没有此共享后的include文件和lib文件,所以分享出来。 通常vs下可以使用libeigen*.dll.a(静态库)来...
在项目上安装Eigen之后,您可以像在Matlab中一样简单地编写矩阵! 开始吧 请注意,首先应在LFW中提取图像上的特征,然后将特征构建为“ dict”类的堆栈,其中包括考虑每个人的姓名,其图像编号和该人的提取特征矩阵...
在Excel中实现各种复杂的矩阵计算的插件;完全交互式操作,实现非常简单;精度跟Matlab和Eigen C++ library等双精度计算结果相同。适用于Excel 2003-2013之间的版本。只是在x64位windows操作系统上使用时偶尔可能...