封装c++与matlab引擎交互的数据结构:行优先矩阵类

我们知道matlab中的矩阵是列优先存储的,而c++中的数据是行优先存储的,而习惯了使用c++的伙伴们,也习惯了行优先存储方式了啦。所以在进行c++调用matlab引擎处理时,这会给两者矩阵数据传递会带来诸多的烦恼,这也是诸多程序bug的来源之一。使用本文TMatrix可以解决这个问题。
摘要由CSDN通过智能技术生成

我们知道matlab中的矩阵是列优先存储的,而c++中的数据是行优先存储的,而习惯了使用c++的伙伴们,也习惯了行优先存储方式了啦(比如看一个二维数组,总会先看行序号,再看列序号)。所以在进行c++调用matlab引擎处理时,这会给两者矩阵数据传递会带来诸多的烦恼,这也是诸多程序bug的来源之一。关于c++调用matlab引擎编程,可参考我的另一篇文,网址为http://blog.csdn.net/feichizhongwu888/article/details/47277565。

下面举一个例子,说明c++的数据存储顺序和matlab的存储数据方式。

int main()
{
    //c++ matrix:2*5=10 elements
    double a[10] = {0,1,2,3,4,5,6,7,8,9};
    Engine* ep;
    if(!(ep = engOpen(NULL)))
    {
        std::cout<<"can't start Matlab Engine!!"<<std::endl;
        return EXIT_FAILURE;
    }
    engSetVisible(ep, true);
    //generating matlab matrix::aa
    mxArray *aa = mxCreateDoubleMatrix(2, 5, mxREAL);
    memcpy(mxGetPr(aa), a, 10 * sizeof(double));
    engPutVariable(ep, "aa", aa);
    std::cin.get();
    engEvalString(ep, "clear;");
    mxDestroyArray(aa);
    engClose(ep);
    return 0;
}
c++中有一个2*5的矩阵,总共10个元素,存储在a[10]里面,如代码所示,之后,将a[10]元素全部传递给matlab变量aa,我们希望matlab能构造一个矩阵:第一行为{0,1,2,3,4}第二行为{5,6,7,8,9},但事实并非如此。程序输出结果,在matlab command window测试aa的值为:


你会发现0-9个元素,是纵向依次填充到2*5的matlab矩阵当中的,这是说明了matlab是列优先存储。


因此,如果你希望matlab构造你理想的矩阵,就必须在c++

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值