mwArray类说明

时间:2024-11-04 08:56:31

mwArray是一个C/C++类的类型,而mxArray是C语言的类的类型

1、创建mwArray阵列

mwArray()     创建空的Matlab阵列,类型为mxDOUBLE_CLASS

mwArray(mxClassID mxID)  创建mxID指定类型的Matlab阵列

mwArray(mwSize num_strings,const char**str)创建字符型阵列,字符串由str指定

mwArray(mwSize num_rows,mwSize num_cols,mx_ClassID mxID,mxCompleixity complex=mxREAL) 创建行数为num_rows,列数为num_cols,类型为mxID的Matalb阵列,对于数值型阵列,将complx做为最后一个参数,确定待创建阵列是否为复数阵列

mwArray(mwSize num_rows,mwSize num_cols,int num_fields,const char**fieldnames)创建行数为num_rows,列数为num_cols结构体阵列,结构体域名为由fieldnames指定,域名个数由num_fields指定

mwArray(mwSize num_dims,const mwSize*dims,mxClassID mxID,mxComplexity cmplx=mxREAL)创建任意维数的Matlab阵列,维数由num_dims指定,各维大小由dims指定,mxID指定阵列的类型。对于数值型阵列,将cmplx作为最后的一个参数,确定待创建阵列是否为复型的阵列。

mwArray(mwSize num_dims,const mwSize *dims,int num_fields.const char**fieldnames)创建任意维数的结构体阵列,维数由num_dims指定,各维大小由dims指定,结构体域名由fieldnames指定,域名个数由num_fields指定

mwArray(const mwArra&arr)根据当前的阵列arr中创建一个新的阵列(复制)

mwArray(const char*str) 根据字符串str创建一个新的字符型阵列

mwArray(re,im)创建一个新的数值阵列,实部为re,虚部为im

mwArray(re)创建一个新的数值阵列,实部为re.

2、mwArray类方法

mwSize NumberOfNonZeros()const 返回稀疏阵列非零元素的个数

mwSize NumberOfElements()const 返回阵列中元素的个数

mwSize NumberofDimensions()const 返回阵列维数

mwSize MaximumNonZeros()const 返回稀疏阵列中最大的元素的个数

mwArray SharedCopy()const 返回一个新的共享数据型mwArray阵列,此阵列与现有的mwArray阵列指向同一个数据块。

mwArray Serialize()const 将mwArray序列化一个新的阵列,新的阵列为mxUINT8_CLASS类型

mwArray RowIndex()const 返回阵列元素的行索引;对于稀疏阵列,只返回非零原素的行索引例如

mwArray a(2,3,mxDOUBLE_CLASS); mwArray rows=();

mwArray Real() 返回数值阵列的实部 例如

double rdata[4]={1.0,2.0,3.0,4.0};double idata[4]={10.0,20.0,30.0,40.0};

mwArray a(2,2,mxDOUBLE_CLASS,mxCOMPLEX);

().SetData(rdata,4);

().SetData(idata,4);

mwArray Image() 返回数值阵列虚部

mwArray Get(mwSize num_indices,....)根据索引返回阵列元素,其中num_indices表示索引数目。Get函数中输入的索引均从1起始。例如

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

mwArray a(2,2,mxDOUBLE_CLASS);

double x;

(data,4);

x=(2,2,2);//返回4 

x=(1,3);//返回3

mwArray Get(const char *name, mwSize num_indices,...) 返回结构体域名为name,指定索引的结构体域,其中num_indices表示索引的数目。Get函数中输入的索引均从1起始。例如

const char* fields[]={"a","b","c"};

mwArray a(1,1,3,fields); //b=a(1).a; 

mwArray b=("a",1,1);//b=a(1,1).b;

mwArray b=("b",2,1,1);

mwArray ColumnIndex() const 返回阵列元素的列索引;对于稀疏阵列,只返回非零元素的列索引。例如

mwArray a(3,2,mxDOUBLE_CLASS);

mwArray rows=();

int NumberOfFields() const 返回结构体域个数

int ElementSize() const 返回mwArray阵列元素大小

int CompareTo(const mwArray& arr)const 对比两个mwArray阵列

bool IsSparse()const 判断是否Sparse阵列

bool IsNumeric()const 判断是否是数值阵列

bool IsEmpty()const 判断是否是空阵列

bool IsComplex()const 判断是否复型阵列

bool Equals(const mwArray& arr)const 判断两个阵列是否相同

3、mwArray类操作符

operate()const 强制转换为其他类型 例如

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

double x;

mwArray a(2,2,mxDOUBLE_CLASS);

(data,4);

x=double a(1,1);

mwArray &operator=(const& x) 赋值操作符 例如

mwArray a(2,2,mxDOUBLE_CLASS);

a(1,1)=1.0;

mwArray operator()(mxIndex i1,mxIndex i2,mwIndex i3,...)索引操作符

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

double x;

mwArray a(2,2,mxDOUBLE_CLASS);

setData(data,4);

x=a(1,1);

mwArray operator(const char* name,mwIndex i1,mwIndex i2,mwIndex i3,....) 结构体域索引操作符.

例如

const char* fields[]={"a","b","c"};

int index[2]={1,1};

mwArray a(1,1,3,fields);

mwArray b=a("a",1,1);

4、mwArray赋值

<1>mwArray 定义矩阵变量

  mwArray  A(rows, cols, type)

参数说明:

   A       : 变量名

   rows:行数

   col   :列数

   type :数t据类型

type类型有:

[cpp]  view plain  copy
  1. typedef enum  
  2. {  
  3.     mxUNKNOWN_CLASS = 0, //未知类型  
  4.     mxCELL_CLASS, //细胞类型  
  5.     mxSTRUCT_CLASS, //结构类型  
  6.     mxLOGICAL_CLASS, //布尔类型  
  7.     mxCHAR_CLASS,  //字符串类型  
  8.     mxVOID_CLASS,  //void类型  
  9.     mxDOUBLE_CLASS,   
  10.     mxSINGLE_CLASS, //单精度浮点数  
  11.     mxINT8_CLASS, //  
  12.     mxUINT8_CLASS,  
  13.     mxINT16_CLASS,  
  14.     mxUINT16_CLASS,  
  15.     mxINT32_CLASS,  
  16.     mxUINT32_CLASS,  
  17.     mxINT64_CLASS,  
  18.     mxUINT64_CLASS,  
  19.     mxFUNCTION_CLASS, //函数类型  
  20.     mxOPAQUE_CLASS, //  
  21.     mxOBJECT_CLASS  //对象类型  
  22. }  
整体含义是:定义矩阵A,行数为:rows,列数为:cols,类型为:type

注: 如果参数不是矩阵,只是一个数,令 rows=1,cols=1即可。

<2>矩阵赋初值:

[cpp]  view plain  copy
  1. int a[6] = {1,2,3,4,5,6}  
  2. mwArray A(2,3,mxINT32_CLASS);    
  3. (a,6); //第二个参数为要设置的数的个数,大小可设为rows*cols  
注: 该过程相当于把1*6的矩阵,转化为2*3的矩阵,matlab转化顺序是,先排第一列,由上到下为a[0] a[1],然后排第二列,由上到下为a[2] a[3],即转化后的A为:

1     3      5

2     4      6

如果要使A为:

1      2     3

4      5     6

需这样赋值:

[cpp]  view plain  copy
  1. <pre name="code" class="cpp">int a[6] = {1,2,3,4,5,6}  
  2. mwArray A(3,2,mxINT32_CLASS);  //修改此处:行列数互换  
  3. (a,6); //第二个参数为要设置的数的个数,大小可设为rows*cols  
 
此时生成的A为: 

1      4

2      5

3      6

该矩阵转置之后,既可以达到所需形式,转置过程可以在matlab的.m文件中添加,先修改.m,然后在生成dll、lib、h文件。

尤其是,在图像处理时,如果传递的矩阵为图像数据矩阵,要采用后一种方法赋值,否则,图像会严重变形失真。二、字符串赋值

[cpp]  view plain  copy
  1. char str[5] = "abcd";  
  2. //或 CString str = "abcd"  
  3. mwArray mwA(str);  
该过程比较简单。