mwArray与C++接口
阅读原文时间:2023年07月13日阅读:1

1.Matlab调用C++http://blog.csdn.net/zouxy09/article/details/20553007

摘录下效果图:

2.mwArray类操作http://blog.sina.com.cn/s/blog_9460ff790101fujz.html

2.1. 复数数组的初始化(由C到matlab)

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);

a.Real().SetData(rdata, 4);

a.Imag().SetData(idata, 4);

对应从mwArray中获取元素

a.Real().GetData(buffer,len);

a.Imag().GetData(buffer,len);

2.2. cell元组阵列的获取

由于mwArray索引运算符()直接返回mwArray类型,因此可以直接声明通过索引获取元组内的矩阵值。

eg: a={[1],[2],[1 2;3 4];[1 3;2 4],[1],[2]};

mwArray b=a(2); //b=[1 3;2 4];

mwArray c=a(5); //c=[1 2;3 4];

PS:mwArray中数组为按列排,因此[1 3;2 4]的索引号为2

2.3. mwArray成员函数使用

int NumberOfDimensions        返回矩阵维数

int NumberOfElements            返回矩阵元素个数

mwArray GetDimensions         返回一维矩阵,表示矩阵各维大小

bool IsComplex                        判断是否复数矩阵

PS:使用GetData前可先使用NumberOfElements确定元素个数,避免越界。

2.4. 字符串转换为mwArray

char str[]="inFile.mat";

mwArray inFile(str);

则inFile则可以直接作为函数的输入参数进行传递。

更详细的说明见:http://blog.sina.com.cn/s/blog_b3facf740101e3c7.html

intNumberOfFields() const 返回结构体域个数

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

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

boolIsSparse()const 判断是否Sparse阵列

boolIsNumeric()const 判断是否是数值阵列

boolIsEmpty()const 判断是否是空阵列

boolIsComplex()const 判断是否复型阵列

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

3.我使用的代码

//输入,文件名,用于载入文件

std::string SFilename;

const mwArray Filename(SFilename.c_str());

mwArray topic_numM(1,5,mxINT8_CLASS);

double b[] = {5,4,3,6,8};

topic_numM.SetData(b,5);

//输出,用于获取数组

int OutNorNum =530;

int OutabNorNum =33;

mwArray Normal;

mwArray x_Abnorm_index;

函数………………………………

double* Ptrue = new double[OutNorNum];

int* Indexfalse= new int [OutabNorNum];

double* Pfalse = new double[OutNorNum];

Normal.GetData(Ptrue,OutNorNum);//此句 导致程序崩溃!越界

x_Abnorm_index.GetData(Indexfalse,OutabNorNum);//此句 导致程序崩溃!超出下标

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章