matlab矩阵转为Eigen库中的矩阵
编程技术  /  houtizong 发布于 3年前   257
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;}}
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) ;
#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;}
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接