MATLAB数据

MATLAB排列

在MATLAB®语言只处理一个对象类型:MATLAB数组。所有MATLAB变量(包括标量、向量、矩阵、字符数组、单元数组、结构和对象)都存储为MATLAB数组。在C/ c++中,MATLAB数组被声明为类型mxArray.的mxArray结构包含以下有关数组的信息:

  • 它的类型

  • 它的尺寸

  • 与此阵列相关联的数据

  • 如果数值,变量是真实的还是复杂

  • 如果稀疏,其指数和非零最大的元素

  • 如果结构或对象,字段和字段名的数量

要访问mxArray结构,使用函数在C或Fortran矩阵api。这些函数允许您在您的MEX文件中创建、读取和查询关于MATLAB数据的信息。矩阵api使用mwSizemwIndex类型以避免移植问题,并允许MEX源文件正确地在所有系统上编译。

mxArray的生命周期

像MATLAB功能,一个MEX文件网关程序通过引用传递MATLAB变量。然而,这些参数是C指针。一个指针一个变量是地址可变的(在存储器位置)。MATLAB功能自动处理数据存储为您服务。当将数据传递到一个MEX文件,你使用指针,下面用于访问和操作变量的具体规则。有关使用指针的工作信息,请参阅编程参考,如C语言程序设计语言作者:Kernighan, B. W.,和D. M. Ritchie。

请注意

由于变量使用内存,您需要了解mex文件如何创建一个mxArray和你的释放(释放)内存责任。这一点很重要,以防止内存泄漏。的生命周期mxArray-and用于管理规则记忆取决于它是否是输入参数,输出参数,或局部变量。你打电话取消分配的功能mxArray取决于你用来创建它的功能。欲了解更多信息,请查阅功能创建的阵列体基质API.

输入参数prhs

一个mxArray通过传递给MEX文件prhs输入参数存在MEX-文件的范围之内。做任何释放内存mxArray在里面prhs参数。也,prhs变量是只读的;不要修改他们在您的MEX文件。

输出参数plhs

如果创建mxArray为一个输出参数(分配内存和创建数据),存储器和数据存在超越MEX-文件的范围。做一个不自由的内存mxArray返回的plhs输出参数。

局部变量

每当使用时,都要分配内存mxCreate *函数创建一个mxArray或者当你调用mxCalloc和相关的功能。在观察了处理输入和输出参数的规则之后,mex文件应该销毁临时数组并释放动态分配的内存。要释放内存,可以使用其中之一mxDestroyArray要么mxFree.有关哪些功能使用,请参阅MX矩阵库.

数据存储

在一列优先(列方向)的编号方案,这是如何存储的Fortran矩阵MATLAB存储数据。MATLAB采用了这种约定,因为它最初是用Fortran语言编写。MATLAB内部存储数据从第一列元件,然后再从第二塔的第二数据元素,依此类推,通过最后一列。

例如,给定的矩阵:

A = [“房子”;'地板';“玄关”]
A =房子地板门廊

它的尺寸为:

尺寸(a)中
ans = 3 5

且其数据被存储为:

如果矩阵是N维,MATLAB表示在N-优先的顺序的数据。例如,考虑一个三维阵列具有尺寸4-通过-2-通过-3..虽然可以可视化数据为:

MATLAB内部表示为以下列顺序该三维数组中的数据:

一个

B

C

D

E

F

G

H

J

K

l

N

O

P

R

年代

T

U

V

W

X

0

1

2

3.

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

mxCalcSingleSubscript函数创建从阵列到所需的元件的第一元件的偏移,使用N维下标。

MATLAB数据类型

复杂的双精度矩阵

在MATLAB中最常见的数据类型是复杂的双精度,非稀疏矩阵。这些矩阵的类型的和维-通过-n,其中是行数和n是列的数目。数据存储为交错的双精度数字向量,实部和虚部相邻存储。指向该数据的指针称为PA(指针数组)。为了测试一个不复杂的矩阵,通话mxIsComplex.

在MATLAB版本9.4 (R2018a)之前,MATLAB使用了a分离存储表示。数据以双精度数字的两个向量的形式存储—一个包含实际数据,另一个包含虚构数据。指向该数据的指针称为PR(指向真实数据)和PI(指向虚构数据的指针)。一个非复矩阵是它的PI空值.但是,要测试非复矩阵,调用mxIsComplex.

其他数字矩阵

MATLAB支金宝app持单精度浮点和8位,16位,32位和64位整数,有符号和无符号。

逻辑矩阵

逻辑数据类型表示逻辑真正要么说明使用数字10, 分别。某些MATLAB函数和运算符返回逻辑1或逻辑0表明某一条件是否成立。例如,语句(5 * 10) > 40返回逻辑1值。

MATLAB烧焦数组

MATLAB烧焦阵列将数据存储为无符号的16位整数。要转换MATLAB烧焦数组到c风格的字符串,调用mxArrayToString.要在C风格的字符串转换为烧焦阵,召唤mxCreateString.

电池阵列

单元阵列是MATLAB阵列,其中每个集合mxArray被称为小区。单元阵列允许不同类型的MATLAB阵列一起存储。单元阵列被存储在类似的方式到数字矩阵,除了数据部分包含指针的到单个载体mxArrays.该向量的成员被称为细胞。每个单元可以是任何支持的数据类型,即使另一单元阵金宝app列的。

结构

一个1-通过-1结构以与a相同的方式存储1-通过-n单元阵列,n是在结构中的字段的数量。数据载体的成员被称为字段。每个字段存储在一个名称关联mxArray.

对象

对象存储和访问的方式相同的结构。在MATLAB中,对象被命名为登记方法的结构。外MATLAB,对象是包含存储额外的类名的结构,即标识对象的名称。

多维数组

任何类型的MATLAB阵列可以是多维的。整数的向量被存储,其中每个元素是对应的尺寸的大小。的数据的存储方法是一样的矩阵。

空数组

任何类型的MATLAB阵列可以是空的。空mxArray至少有一个维度等于零。例如,双精度mxArray类型的,其中n等于0,PA空值,为空数组。

稀疏矩阵

稀疏矩阵具有从MATLAB全矩阵不同的存储惯例。参数PA仍然是由双精度数字或逻辑值组成的数组,但该数组只包含非零数据元素。

有三个附加参数:nzmax,红外jc.使用mwSizemwIndex声明这些参数变量时的类型。

  • nzmax是包含的长度的整数红外PA.它是在稀疏矩阵的非零元素的最大数量。

  • 红外分长度的整阵列nzmax包含在相应元素的行索引PA.

  • jc分长度的整阵列n + 1个,其中n是列在稀疏矩阵的数量。在C中,一个第一元件mxArray索引为0。的jc数组包含列索引信息。如果j稀疏矩阵的列具有任何非零元素,jc [j]是索引红外PA的第一个非零元素j列。指数JC [J + 1] - 1包含该列中的最后一个非零元素。为j稀疏矩阵的第列,jc [j]为前一列中所有非零元素的总数。的最后一个元素jc数组,JC [n]的,等于NNZ,整个稀疏矩阵中非零元素的个数。如果NNZ小于nzmax更非零项能够被插入到该阵列而不分配更多的存储。

使用数据类型

您可以用C/ c++编写接受MATLAB支持的任何类或数据类型的源MEX文件、mat文件应用程序和引擎应用程序(参见金宝app数据类型)。在Fortran中,只有创造双精度n-通过-数组和字符串的支持。金宝app您可以使用二进制C / C ++和Fortran MEX文件,如MATLAB功能。

警告

MATLAB不检查用C/ c++或Fortran创建的MATLAB数据结构的有效性,这些数据结构使用矩阵库中的create函数之一(例如,mxCreateStructArray)。使用无效的语法来创建MATLAB数据结构可能会导致您的C/ c++或Fortran程序中出现意想不到的行为。

声明数据结构

为了处理MATLAB阵列,使用类型mxArray.下面的语句声明了一个mxArray命名MYDATA的:

mxArray * myData;

定义的值MYDATA的使用的一个mxCreate *功能。一些有用的数组创建例程mxCreateNumericArray,mxCreateCellArraymxCreateCharArray.例如,下面的语句的分配-通过-1浮点mxArray初始化为0:

myData = mxcreatedouatrix (m, 1, mxREAL);

C / C ++程序员应该注意在一个MATLAB阵列数据是在列主顺序。(有关的说明,请参见数据存储)。使用MATLABmxGet *阵列访问例程读取从数据mxArray.

操作数据

mxGet *数组访问程序获得的该数据引用mxArray.使用这些程序在你的MEX文件来修改数据。每个函数可以访问的具体信息mxArray.以下是一些有用的函数mxGetDoubles,mxGetComplexDoubles,mxGetMmxGetString.许多这些功能都有相应的mxSet *程序,让您可以在阵列中修改值。

下面的语句读取输入prhs [0]成C风格的字符串BUF.

字符* BUF;诠释buflen;INT状态;buflen = mxGetN(prhs [0])*的sizeof(mxChar)+1;BUF = mxMalloc(buflen);状态= mxGetString(prhs [0],buf中,buflen);

探索例子

里面包括有MATLAB的例子源MEX文件,名为explore.c中,标识的输入变量的数据的类型。在这个例子中的源代码是在matlabroot走读生/ /墨西哥人例子,其中matlabroot代表那里MATLAB是安装在系统上的顶层文件夹。

请注意

在涉及文件夹路径的与平台无关的讨论中,本文档使用UNIX®惯例。例如,一般的参考MEX文件夹matlabroot走读生/ /墨西哥人例子.

要构建示例MEX文件,第一次将文件复制到可写文件夹路径。

拷贝文件(fullfile (matlabroot,'EXTERN','例子',墨西哥人的,'explore.c'),“。”,'F')

使用MEX命令来构建MEX文件。

MEXexplore.c-R2018a

类型:

X = 2;探索(x)的
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -名称:prhs[0]维度:1 x1类名:双- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (1,1)= 2

探索接受任何数据类型。尝试使用探索这些例子:

探索([1、2、3、4、5])探索123.45探索({1 2 3 4 5})探索(INT8([1 2 3 4 5]))探索{1 2 3 4 5}探索(稀疏(眼(5)))探索(结构('名称',“乔·琼斯”,“ext”,7332))探索(1,2,3,4,5)探索(复合物(3,4))

相关话题