mwArray的用法

    xiaoxiao2021-04-16  29

      mwArray :C++用它向MATLAB传递输 i/o 参数。MATLAB中的参数都是矩阵表示,哪怕是1*1的矩阵。

     1)构造函数

      mwArray(mwSize num_rows, const mwSize num_cols, mxClassID mxID,mxComplexity cmplx = mxREAL)

      num_rows :行数; num_cols :列数;mxID:The data type type of the matrix.: cmplx:The complexity of the matrix (numeric types only).

       mwArray a(2, 2, mxDOUBLE_CLASS);

       mwArray b(3, 3, mxSINGLE_CLASS, mxCOMPLEX);

       mwArray c(2, 3, mxCELL_CLASS); 

        mwArray(mwSize num_rows, mwSize num_cols, mxClassID mxID,mxComplexity cmplx = mxREAL)

         mwArray(const char* str)

       mwArray(mwSize num_strings, const char** str)

    mwArray(mwSize num_rows, mwSize num_cols, int num_fields,const char** fieldnames)

    mwArray(mwSize num_dims, const mwSize* dims, int num_fields,const char** fieldnames)

    mwArray(const mwArray& arr)

    mwArray( re)

    mwArray( re, im)

    2) 方法

     

    mwArray SharedCopy() const

    mwArray Serialize() const

    mxClassID ClassID() const

    int ElementSize() const

    size_t ElementSize() const

    mwSize NumberOfElements() const

    mwSize NumberOfNonZeros() const

    mwSize MaximumNonZeros() const

    mwSize NumberOfDimensions() const

    int NumberOfFields() const

    mwString GetFieldName(int index)

    mwArray GetDimensions() const

    bool IsEmpty() const

    bool IsSparse() const

    bool IsNumeric() const

    bool IsComplex() const

    bool Equals(const mwArray& arr) const

    int CompareTo(const mwArray& arr) const

    int HashCode() const

    mwString ToString() const

    mwArray RowIndex() const

    mwArray ColumnIndex() const

    void MakeComplex()

    mwArray Get(mwSize num_indices, ...)

    mwArray Get(const char* name, mwSize num_indices, ...)

    mwArray Get(mwSize num_indices, const mwIndex* index)

    mwArray Get(const char* name, mwSize num_indices, const mwIndex*index)

          #include "mclcppclass.h"

          double data[4] = {1.0, 2.0, 3.0, 4.0};

          double x;

           mwArray a(2, 2, mxDOUBLE_CLASS);

          a.SetData(data, 4);

          x = a.Get(1,1); // x = 1.0

           x = a.Get(2, 1, 2); // x = 3.0

           x = a.Get(2, 2, 2); // x = 4.0

     

    mwArray Real()

    mwArray Imag()

    void Set(const mwArray& arr)

    void GetData(* buffer, mwSize len) const

    void GetLogicalData(mxLogical* buffer, mwSize len) const

    void GetCharData(mxChar* buffer, mwSize len) const

    void SetData(* buffer, mwSize len)

         #include "mclcppclass.h"

         double rdata[4] = {1.0, 2.0, 3.0, 4.0};

         double data_copy[4] ;

         mwArray a(2, 2, mxDOUBLE_CLASS);

         a.SetData(rdata, 4);

         a.GetData(data_copy, 4);  // 取出a中的数据。

    void SetLogicalData(mxLogical* buffer, mwSize len)

    void SetCharData(mxChar* buffer, mwSize len)

    4.  mwArray 与 mxArray的用法区别:

    Seventy http://www.simwe.com/forum/post/view?bid=19&id=361497&sty=1&tpg=7&age=100 首先,mxArray是Matlab C 函数库的结构体,而mwArray是Matlab C++ 函数库中对mxArray的包装类。 其次,二者的内存管理方式不同。mxArray的内存管理方式比较松散,由于是C函数库,没有数据封装,必须对临时阵列和约束阵列的概念极为明确,并且须小心地防止内存泄漏(要多写好多代码)。尽管有自动内存管理机制(mlfEnterNewContext,mlfReleasePreviousContext),仍然要处处调用mlfAssign,麻烦得很。然而mwArray就好的多,一切交给C++对象去搞定,你只要放心地用就可以了。不过Matlab C++函数库为了防止频繁内存分配和释放重写了内存分配和释放等函数。你会发现对于mwArray a,b; a=b;实际上并没有生成两个相同数据块,只是指针,只有发成数据改变时才copy完整数据。 再次,这两个东西各自有一套与之相对应的函数。函数的返回值类型不同,需要多加注意。 最后,用的时候mxArray要使用指针,而mwArray直接当类对象使。如果你不是Hardcore级的牛人或具有Hardcore倾向的潜牛人,我强烈建议你使用后者! 举一个简单的例子:如果你需要计算c=a+b那么两者的区别是这样的: mxArray: void fun(){ …… double d_a=1,d_b=2; mxArray *a,*b,*c; mlfEnterNewContext(0,0); mlfAssign(&a,mlfScalar(d_a)); mlfAssign(&b,mlfScalar(d_b)); mlfAssign(&c,mlfPlus(a,b)); …… mlfReleasePreviousContext(0,0); mxDestroyArray(a); mxDestroyArray(b); mxDestroyArray(c); } mwArray: void fun(){ …… mwArray a,b,c; a=1; b=2; c=a+b; …… }

    顶 0 踩 0    

    我的同类文章

    http://blog.csdn.net
    转载请注明原文地址: https://ju.6miu.com/read-672281.html

    最新回复(0)