mwArray笔记

1、mwArray转换成mwString

mwArray result;
mwString ss = result.ToString();

2、mwString转换成string

mwString ss;
const char* ass = ss.operator const char* ();
qDebug() << ass;

3、mwArray结构体数据读取

示例一:
mwArray surface_data;
mwString peak = surface_data(2).ToString();


示例二:
mwArray surface_data;
mwString peak = surface_data(2)(1).ToString();

4、矩阵维数、行数、列数、元素个数

# 矩阵维数,1代表一维数组,2代表二维数组
mwSize dims = surface_data(1)(1).NumberOfDimensions();

各维的具体大小:

mwArray ::GetDimensions()返回一个数组,表示数组各维数的大小,对于向量或二维数组,返回值都是两个元素,第1个元素表示行数,第2个元素表示列数。

mwArray arrayDim = surface_data(1)(1).GetDimensions();

行数及列数:

//行数
int rowCnt = arrayDim.Get(dims, 1);

//列数
int colCnt = arrayDim.Get(dims, 2);

元素个数:

mwArray::NumberOfElements() 返回数组的元素个数,等于行数乘以列数。

5、mwArray数组赋值

mwArray:: SetData(mxUint64* buffer, mwSizelen) 用于给数组赋值

其中,buffer必须是一维数组,即便mwArray变量是一个二维数组,len是一维数组的元素个数,等于行数乘以列数。

int a[9] = { 1,2,3,4,5,6,7,8,9 };
mwArray A(3, 3, mxINT32_CLASS);
A.SetData(a, 9); //第二个参数为要设置的数的个数,大小可设为rows*cols
mwString c = A.ToString();
qDebug() << c;

 打印结果为:

mwArray笔记_第1张图片

6、mwArray类型判断

mwArray A(4, 4, mxINT32_CLASS);
mxClassID cid= A.ClassID();
qDebug() << cid;

7、mwArray数组元素读取

 可以使用mwArray::Get()函数读取数组的元素。

# 数据A为:
1    5    9   13
2    6   10   14
3    7   11   15
4    8   12   16
int dim=2; // 二维数组
# double value=matrixA.Get(dim,j,i); //按照dim维数数组读出,第j行, 第i列
double value=matrixA.Get(2,3,4); //结果:15

8、 含字段名mwArray结构体定义

const char* fields[] = { "x","y","z" };
# 1,1代表行数、列数;3代表字段个数;fields代表字段名
mwArray B(1, 1, 3, fields);

示例:

//给mwArray A赋值
double a[9] = { 1,4,7,2,5,8,3,6,9};
mwArray A(3, 3, mxDOUBLE_CLASS);
A.SetData(a, 9); //第二个参数为要设置的数的个数,大小可设为rows*cols

//构造含字段名的结构体cloud
const char* fields_cloud[] = { "ptx","pty","ptz" };
mwArray cloud(1, 1, 3, fields_cloud);
//依次给各个字段名赋值
cloud(1) = A;
cloud(2) = A;
cloud(3) = A;
mwString scloud = cloud.ToString();
qDebug() << scloud;

//构造含字段名的结构体material
const char* fields_material[] = { "peak","bottom"};
mwArray material(1, 1, 2, fields_material);

//依次给各字段名赋值,mwArray为数组类型,即使传入一个值,也需整合成一行一列的数组
mwArray peak_data(1, 1, mxDOUBLE_CLASS, mxREAL);
double peak[1] = {23.9};
peak_data.SetData(peak, 1);
material(1) = peak_data;
mwArray bottom_data(1, 1, mxDOUBLE_CLASS, mxREAL);
double bottom[1] = { 13.5 };
bottom_data.SetData(bottom, 1);
material(2) = bottom_data;

mwString smaterial = material.ToString();
qDebug() << smaterial;

//构建含字段名结构体fields_result
const char* fields_result[] = { "cloud","material" };

mwArray result(1, 1, 2, fields_result);
result(1) = cloud;
result(2) = material;

mwString result_data = result.ToString();
qDebug() << result_data;

运行结果:

ptx: [3x3 double]
pty: [3x3 double]
ptz: [3x3 double]

peak: 23.9000
bottom: 13.5000

cloud: [1x1 struct]
material: [1x1 struct]

你可能感兴趣的:(matlab,c++)