- 浏览: 695548 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 830在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 21871、使用第三方修改后的wormhole工程 原始工程wor ... -
C++中读取控制台输出,并将文件指针FILE*转换为istream
2017-11-27 15:03 1880解决的问题: 1、通过执行系统的bash命令后,获取其输出( ... -
c++中使用boost库在共享内存中存储map
2017-11-09 11:37 5502boost库中的interprocess包可以在共享内存中创建 ... -
近似最近邻算法库FLANN
2017-04-25 18:45 0FLANN库是计算近似最近邻的库, 问题定义如下: 给定距离函 ... -
C++杂记-- 重定向std::cout等
2017-04-18 17:28 19921、屏蔽std::cout 参见:http://stackov ... -
CMake指定目标代码的平台(win32,x64)
2016-06-03 20:54 11774主要参考自:http://blog.c ... -
windows 10下安装GPU版MXNet
2016-06-03 21:28 8600上回说到编译CPU版的MXNet: http://cheris ... -
windows下安装CPU版mxnet
2016-05-23 23:14 17625MXnet (mix net)类似Caffe,Tensorfl ... -
Matlab中的面向对象编程
2015-12-20 22:43 2704官方文档:http://cn.mathwo ... -
Linux C++编译及 静态/动态 链接库 笔记
2015-12-20 19:49 60751、C++文件的编译 g++参 ... -
matalb中struct的诡异构造方式
2015-12-16 19:37 1098读MatConvNet代码时被struct坑了,特此记录!!! ... -
Linux (Ubuntu) 下 Eclipse C++ 环境配置
2015-12-08 21:49 19681、安装JDK 参见http://blog.csdn.net/ ... -
Photoshop插件开发-filter
2015-10-11 22:53 3389初学,,感觉PS插件的文档很烂,,教程也很少,,也就这么简单学 ... -
使Visual Assist X支持CUDA的.cu文件的代码提示
2015-07-17 00:05 2332现在安装CUDA很方便了,直接支持Visual Studio。 ... -
CUDA程序block和thread超出硬件允许值时的异常
2015-07-13 11:32 3769调用CUDA的核函数时指定block 和 thread大小,该 ... -
MatConvNet的excise 3改为网络配置文件形式
2015-06-30 11:28 2980MatConvNet为vlFeat作者写的matlab下的卷积 ... -
matlab下GPU编程笔记
2015-06-27 18:00 2687不多说,直接上代码 gpuDevice % 查看系统中 ...
相关推荐
近需要用 C++ 做一些数值计算,之前一直采用Matlab 混合编程的方式处理矩阵运算,非常麻烦,直到发现了 Eigen 库,简直相见恨晚,好用哭了。 Eigen 是一个基于C++模板的线性代数库,直接将库下载后放在项目目录下,...
Eigen库是C++中的一个开源数学库,广泛应用于矩阵运算、线性代数、优化问题等领域。今天,我们将重点介绍Eigen库在计算矩阵特征值及特征向量方面的应用。 什么是矩阵特征值和特征向量 在线性代数中,矩阵的特征值...
EIGEN矩阵库是C++编程语言中一个高效、灵活且功能强大的线性代数库,主要用于处理向量、矩阵以及相关的线性运算。它的设计目标是提供与MATLAB类似的矩阵操作体验,同时保持C++的性能和低级控制。在EIGEN库中,你可以...
本文主要介绍了Eigen库的基本概念和使用方法,包括如何包含头文件、定义不同类型的矩阵、初始化矩阵、获取矩阵信息、矩阵和数组之间的转换以及调整矩阵大小等。通过学习这些基础知识,可以帮助开发人员快速上手并...
本项目旨在实现MATLAB矩阵计算的功能,将这些功能移植到C++环境中。下面我们将深入探讨如何在C++中实现MATLAB矩阵运算的关键知识点。 1. **矩阵基础**: 在MATLAB中,矩阵是最基本的数据结构,可以执行各种数学...
总而言之,这份Eigen和Matlab指令对照表为使用Eigen库的开发者提供了一个方便的参考,使他们能够快速找到如何用Eigen库来实现Matlab中常见的操作和函数,从而更顺利地进行数值计算和矩阵运算的开发工作。
在MATLAB环境中进行开发时,有时我们需要处理矩阵和向量的高级操作,这时"Eigen"的概念就显得尤为重要。Eigen在MATLAB中主要指的是特征值(eigenvalues)和特征向量(eigenvectors),它们是线性代数中的基本概念,...
标题中的“MATLAB矩阵计算器.zip”表明这是一个与MATLAB软件相关的资源,可能是一个实现矩阵运算的程序或工具。MATLAB是一种强大的数学计算环境,尤其在矩阵和数组操作方面表现出色,广泛应用于工程、科学和经济等...
在"eigen-2.0.15_matlab_"这个压缩包中,我们可以推测它包含的是Eigen库的一个版本,该版本可能针对MATLAB用户进行了优化或者提供了与MATLAB兼容的接口。下面将详细介绍Eigen库及其在MATLAB环境中的应用。 Eigen库...
由于其简洁的API设计和高性能,使用Eigen可以使C++代码在处理矩阵运算时达到类似MATLAB的便捷性。 首先,要使用Eigen,你需要在项目中包含相应的头文件,例如`#include <Eigen/Dense>`,这将引入大部分常用的矩阵和...
虽然标签是"C++",但我们可以假设这个资源是关于MATLAB的,因为MATLAB矩阵的操作对于C++程序员学习数值计算库(如Eigen、NumPy等)也是有帮助的。 生成矩阵的基本方法有很多种,以下是一些关键点: 1. **空矩阵**...
Eigen库中提供了丰富的矩阵操作,包括转置、共轭和共轭转置。`transpose()`函数返回矩阵的转置,而`adjoint()`用于复数矩阵的共轭转置。`conjugate()`函数则返回矩阵的共轭。 获取矩阵的尺寸和元素数量是通过`size...
在C++编程中,Eigen库是一个强大的矩阵和向量操作库,特别适合于数值计算和线性代数应用。本文将深入探讨如何有效地使用Eigen库,并提供一些直观的理解和示例。 首先,为了使用Eigen库,你需要在IDE中设置包含路径...
4. 处理结果:从返回的矩阵中提取特征值和特征向量,通常特征值位于对角矩阵中,而特征向量则按列存储。 5. 清理:在完成计算后,记得释放分配的内存资源,防止内存泄漏。 在实际应用中,GSL的性能优势主要体现在...
C++中的Eigen库是一个高效的线性代数库,它提供了丰富的功能来处理矩阵和向量操作,对于数值计算和科学编程来说非常有用。以下是对Eigen库的一些关键知识点的详细解释: 1. **IDE设置**:在集成开发环境中,为了...
Eigen库是这个领域的关键组件,它提供了与MATLAB相似的功能,使得开发人员能够在桌面应用程序中执行复杂的数值计算,特别是在信号处理、图像分析、机器学习等领域。以下将详细介绍Eigen库中的特征值分解(eig)、...
例如,对于一个Eigen矩阵对象`MatrixXf A`,可以使用`A.fullPivHouseholderQR()`得到QR分解的结果。 **2. 特征值计算** 特征值是矩阵A满足方程Ax = λx的非零向量x对应的标量λ。特征值和特征向量揭示了矩阵的内在...
Eigen是一个开源的C++库,专门用于处理线性代数问题,如向量、矩阵运算以及更复杂的线性系统解算。在标题“eigen-3.3.7.zip”和描述中,我们看到的是Eigen库的一个特定版本,即3.3.7版的压缩包。这个版本包含了所有...
**矩阵计算库C++语言——深入理解Eigen** 在计算机科学中,线性代数是解决大量问题的关键工具,尤其是在图像处理、机器学习、物理模拟等领域。C++作为一门强大而灵活的编程语言,自然需要一个高效且易于使用的矩阵...