精华内容
下载资源
问答
  • C#中常用的基本类型有...C#里面的数据类型就算是和matlab里面的名字相同也是无法直接使用的。因为在Matlab中基本上都是以矩阵的形式来组织数据,和C#中对于数据的处理方式完全不同。两者的互通必须通过MWArray这个类。

    C#中常用的基本类型有int、double、string、bool、Byte等,matlab中的基本类型有double、single、int32、char、struct等等。

    C#里面的数据类型就算是和matlab里面的名字相同也是无法直接使用的。因为在Matlab中基本上都是以矩阵的形式来组织数据,和C#中对于数据的处理方式完全不同。两者的互通必须通过MWArray这个类,在上一篇《MATLAB.NET混合编程之二》中就提到过这个类。matlab编译出给C#调用的dll(COM组件除外),基本上输入和输出都需要用到它。

    MWArray是什么?

    根据资料1的解释,MWArray是MathWorks公司是为其他语言调用matlab编译的dll设计出的一种数据类型。它本身是抽象类,并且它是 MWNumericArray、MWLogicalArray、MWCharArray、MWStructArray和MWCellArray的基类(除了MWIndexArray,MWIndexArray本身也是抽象类)。这些子类都有诸如维度的属性,比如维度数,维度尺寸,元素长度,字段名等等。

    数据类型的映射规则

    下面这个表也是来源于资料一:

    .NET Type MWArray Type MATLAB Type
    System.Double MWNumericArray double
    System.Number MWNumericArray double
    System.Float MWNumericArray single
    System.Byte MWNumericArray int8
    System.Short MWNumericArray nt16
    System.Int32 MWNumericArray int32
    System.Int64 MWNumericArray int64
    System.Char MWCharArray char
    System.String MWCharArray char
    System.Boolean MWLogicalArray logical
    N/A MWStructArray structure
    N/A MWCellArray cell

    注意:遵循.NET CLS规范的语言不支持无符号的uint16、uint32和uint64,但这三个在Matlab中是支持的。所以给.net开发组件时,这三种类型的变量就不能被用于M函数中。最后的structure和cell这两种数据类型在.net中完全无法找到合适的对应类型,用N/A来表示。

    如何传递数据

    举个例子,某个Matlab提供的函数为MWArray demoFunction1(MWArray arr);如何使用呢?(因为所有的Matlab函数的参数都是MWArray,所以具体该怎么组织数据提供给Matlab的函数需要获取该函数的帮助文档或者直接去问函数的编写者。)

    • 假设需要输入的是单个数字

    比如需要输入的是double、int等,如何传递参数?首先根据映射表,C#里面的数据类型都是对应于MWNumericArray,所以应该查找MWNumericArray的构造函数,如何以数据类型为参数构造一个新的MWNumericArray对象。

    根据MWNumericArray构造函数参考手册,里面列举了约58种构造函数。比如double类型的就可以使用MWNumericArray(Double)这个构造函数构造对象。MWNumericArray num=new MWNumericArray(3.1415926)

    除此之外,.net的数值类型也可以直接隐式转换为MWNumericArray。MWNumericArray num=3.1415926;

    构造出MWNumericArray对象之后就可以直接给Matlab的函数赋值了,因为MWNumericArray可以隐式转化为MWArray。

    • 假设需要输入的是数字数组

    根据手册的构造函数,可以将数组先赋值给MWNumericArray或者使用MWNumericArray(Int32[])构造函数构造MWNumericArray对象再给该对象赋值,最后将结果赋值给MWArray。

    例如:

        MWNumericArray arr=new int[]{1,2,3,4};
        MWArray factor=arr;
        Console.WriteLine(arr.ToString());

    输出结果是:1 2 3 4

    注意,如果使用MWNumericArray arr=new MWNumericArray(new int[]{3,2});建立的MWNumericArray对象是一个三行两列的空矩阵,而不是个一行两列的矩阵。
    它的结果是:

    0   0
    0   0
    0   0
    • 假设是多维数字数组

    多维数组怎么赋值?比如new int[,]{{1,2},{3,4}}。多维数组和一维数组是一样的,在Matlab看来并没有什么差别,只不过是维度不同的的矩阵而已,一维数组是1*n的矩阵,二维数组是m*n等等诸如此类。所以在用法上也没有什么差别,可以直接参考一维数组的用法。

    查看数组各个维度的长度可以使用MWArray的Dimensions属性。这是个数组,Dimensions[0]代表行数,Dimensions[1]代表列数,高维数组可以参考这种方法继续获取其他维度的长度。

    • C#一维数组转换为Matlab二维矩阵

    使用MWNumericArray(Int32, Int32,Double[])可以让C#的一维数组变为Matlab的二维数组:

        MWNumericArray arr = new MWNumericArray(2,2, new int[] { 1, 2, 3, 4 });
        Console.WriteLine(arr.ToString());

    结果是:

    1   2
    3   4
    • C#字符串转化为Matlab矩阵

    Matlab中没有字符串的概念,它能够处理的是单个的字符,所以C#中的字符串传递给Matlab是使用字符串数组MWCharArray来完成。

    和数字类型的转换方式类似,在C#中可以直接给MWCharArray变量赋值,也可以通过构造函数构造MWCharArray对象:

    MWCharArray arr="this is an example";
    MWCharArray arr=new MWCharArray("this is an example");

    上面两者的效果是一样的。最终arr内都是行矩阵,即行数为1,列数与字符串中字符数量相同的矩阵。

    • C#字符串数组转化为Matlab矩阵

    如果是使用C#数组给MWCharArray赋值,那么结果就是个行数与数组长度相同,列数与最大行字符数相同的矩阵,例如

    MWCharArray arr=new MWCharArray(new string[]{"a","b","cd"});

    上例中arr最终就是个三行两列的字符矩阵。

    • MWStructArray

    MWStructArray不关注具体的数据类型,使用的也不太多,一般情况下都可以使用其他类型的对象完成相关功能。使用方法:

    MWStructArray arr = new MWStructArray(new int[] { 3, 3 }, new string[] { "a", "b", "c" });
    arr["a", 1, 1] = "array";
    arr["b", 1, 1] = 0;
    arr["c", 1, 1] = 98989;
    • MWCellArray

    MWCellArray类型是所有类型中功能最强大,使用也最复杂的类型。MWCellArray类型内部也是不关心数据类型的,也就是说可以存放任意的数据类型,可以是MWNumericArray,也可以是MWCharArray,因此表达方式非常灵活,适合用于各种场景。使用方法:

    MWCellArray cel = new MWCellArray(3, 4);
    cel[1, 1] = (MWNumericArray)new int[] { 1, 2, 3 };
    cel[1, 2] = 1;
    cel[1, 3] = "matlab";

    限于篇幅,不可能将所有的数据转化方法都在此文中一一列出,如果文中的内容不能答疑解惑,最好的办法就是去查阅相关的API文档,那里的资料是最全面的,经常查看MSDN的朋友应该是可以很容易看懂的。

    注意事项

    • 个人在测试中发现,如果项目的.net版本是4.5.2,那么在使用 MWNumericArray arr=new int[]{1,2,3,4};或其他方法给MWNumericArray对象初始化是会报错:“MathWorks.MATLAB.NET.Arrays.MWNumericArray”的类型初始值设定项引发异常。

    解决办法:将.net版本切换成4.0(client profile也可以)

    • 在多维数组的使用过程中经常会发现有的数据不需要填充或者数据有错误怎么办?

    解决办法:最好是在matlab函数开发过程中就约定好这类的数据使用什么来替代。假设接收的参数是不限制数据类型的,比如MWCellArray,那么可以使用null或者NAN等常见的符号来表示;假设matlab函数要求传入的是纯数字类型,比如MWNumericArray,可以使用“负无穷大”来表示,matlab和c#(double.NegativeInfinity)中都可以直接识别,易用性较好。

    参考资料

    1. MWArrayAPI HELP
    2. Matlab中文论坛
    展开全文
  • 3.double(s):将符号表达式s转化为双精度数值 4.char(s):将符号表达式s转化为字符串 举例: t=sqrt(sym(pi)); a=vpa(t); b=double(t); 结果: t = pi^(1/2) a =1.7724538509055160272981674833411 b =1.7725 .

    1.digits(n):设置vpa计算结果的有效数字的位数

    2.vpa(s):计算符号表达式s的数值结果,结果还是sym型
    vpa(s,n):采用n位有效数字计算精度求s的数值结果

    3.double(s):将符号表达式s转化为双精度数值

    4.char(s):将符号表达式s转化为字符串

    举例:

    t=sqrt(sym(pi));
    a=vpa(t);
    b=double(t);
    

    结果:

    t = pi^(1/2)
    a =1.7724538509055160272981674833411
    b =1.7725 
    
    展开全文
  • 上一篇《MATLAB.NET混合编程之三~~从C#向Matlab的数据类型转化》中已经详细介绍了从C#向Matlab传递数据时使用的方法,那么Matlab计算完成后在C#中应该怎么获取它的计算数据呢?需要遵循两个基本步骤。

    上一篇《MATLAB.NET混合编程之三~~从C#向Matlab的数据类型转化》中已经详细介绍了从C#向Matlab传递数据时使用的方法,那么Matlab计算完成后在C#中应该怎么获取它的计算数据呢?

    需要遵循两个基本步骤:

    1. 弄清楚Matlab函数传回的数据到底是什么格式?struct?cell?char?抑或是numeric?
    2. 将MWArray转化为对应的MW****Array并从MW****Array中获取所需的数据

    如何传递数据

    • 从MWArray到C#中的数字

    MWNumericArray中的数据可以转化为Byte、double、float、integer、long和short类型,一般常用的就是int和double两种。

    同样使用举例说明的方式来讲解:

    MWArray mwArr = (MWNumericArray)new int[] { 1, 2, 3, 4 };
    MWNumericArray arr = (MWNumericArray)mwArr;
    int a = arr[1, 1].ToScalarInteger();
    double b = arr[1, 2].ToScalarDouble();

    ToScalar****这类函数是MWNumericArray内部数据转化为C#中数字类的数据类型所使用的方法,字面意思就是转化为某标量类型。

    • 从MWArray到字符串

    先从MWArray转化为MWCharArray,然后直接给string赋值

    MWArray mwArr = "c# and matlab";
    MWCharArray arr = (MWCharArray)mwArr;
    string str = arr.ToString();
    • 从MWArray到数组

    先从MWArray转化为MWNumericArray,然后在C#中进行类型转化

    对于二维数组:

    MWArray mwArr = (MWNumericArray)new double[2, 2] { { 1.1, 2.2 }, { 3.3, 4.4 } };
    Array arr = mwArr.ToArray();
    double[,] dArr = (double[,])arr;

    或者直接

    double[,] dArr = (double[,])mwArr.ToArray();

    对于一维数组,还有另外的方法可以使用:

    MWArray mwArr2 = (MWNumericArray)new double[] { 1.1, 2.2 };
    Array dArr3 = ((MWNumericArray)mwArr2).ToVector(MWArrayComponent.Real);
    double[] arr = (double[])dArr3;

    ToVector的参数MWArrayComponent.Real是指复数中的实部,与此相对的是MWArrayComponent.Imaginary,这个是虚部。如果二维数组使用上述方法转化,会变成一维数组。new double[2, 2] { { 1.1, 2.2 }, { 3.3, 4.4 } }会变成new double[]{1.1,3.3,2.2,4.4}

    参考资料:

    1. MWArrayAPI HELP
    2. Matlab中文论坛
    展开全文
  • C# Matlab数据类型转化

    千次阅读 2016-04-21 10:41:49
    注意:1,C#调用matlab生成的dll中的函数时,入口参数只能是MWArray类型(Matlab的数据类型)或者MWNumericArray类型(Matlab和C#的中间类型)(通过MWNumericArray类型可以点出许多转换函数) 2,可以将字面值...

    注意:1,C#调用matlab生成的dll中的函数时,入口参数只能是MWArray类型(Matlab中的数据类型)或者MWNumericArray类型(Matlab和C#的中间类型)(通过MWNumericArray类型可以点出许多转换函数)

    2,可以将字面值直接赋给MWArray或MWNumericArray类型的变量

    3,可以C#的变量将强制类型转化为MWArray类型或MWNumericArray类型(通过MWNumericArray())。


    转换:

    一, C#数据类型到M类型(C#数据不是数组)

    1, 直接将值传递给已经初始化的MWArray数组中的成员(将字面值直接赋给MWArray或MWNumericArray类型的变量)

    2, 直接将数据类型赋值给已经初始化的MWNumericArray变量(可以C#的变量将强制类型转化为MWArray类型或MWNumericArray类型(通过MWNumericArray())。)

    3, 直接将字符串类赋值给已经初始化的MWCharArray变量

    二, 如果是数组类型:

    直接赋值给MWNumericArray变量(或强制类型转换)

    总之,MWArray是总类型,其它的以MW开头,以Array结尾的变量类型都可以直接对它进行赋值或取值。





    M类型到C++/C#数据类型

    先将输出参数强制转化为MWNumericArray类型(MWNumericArray()),再调用各种转化函数。(MWArray只有.ToString()和.ToArray()两种方法)

    1,public ArrayToArray(MWArrayComponent component); (有MWArrayComponent.Real和MWArrayComponent.Imaginary两种//相当于取数据的实数部分或虚数部分)或public Array ToArray()的方法

    将M类型转换成C#的Array类型,然后可以直接转换成其它类型的数组。(转化后的结果可以再强制转化成其它类型的数组)(得到数组

    2,publicoverride string ToString();

    将M类型转换成C#的字符串类型;stringarror = mwArgout[2].ToString();

    3,public ArrayToVector(MWArrayComponent component);(有MWArrayComponent.Real和MWArrayComponent.Imaginary两种)

    将M类型转换成C#的Array类型,然后可以直接转换成其它类型的向量。(得到向量,一维数组

    4,public byteToScalarByte();

    将M类型转换成C#的字节类型;

    5,publicdouble ToScalarDouble();

    将M类型转换成C#的双精度类型;

    6,public float ToScalarFloat();

    将M类型转换成C#的单精度类型;

    7,public int ToScalarInteger();

    将M类型转换成C#的整型类型;

    8,public long ToScalarLong();

    将M类型转换成C#的长整C/C++/C#数据型类型;

    9,public short ToScalarShort();

    将M类型转换成C#的短整型类型




    double[] a = { 1, 2, 3, 4, 5,6 };//输入参数1

    MWNumericArray ma = newMWNumericArray(3, 2, a);//转换成matlab需求的格式(将a转为3行2两列的数组)

     

     

     

     

    更多的数据格式转换,请用matlab的help索引MWArray

    http://cn.mathworks.com/help/dotnetbuilder/MWArrayAPI/html/57290a83-9e6e-4179-a1b8-9fb0344544ce.htm

    http://www.ithao123.cn/content-10818696.html
    展开全文
  • MATLABExcel数据的导入类型转化

    千次阅读 2019-11-04 16:06:53
    MATLAB下的数据类型转化导入数据MATLAB的 table 数据类型的转换 导入数据 在MATLAB的主控板上,有一个导入数据的选项卡 在使用这个模块的情况下就可以直接将Excel的数据导入到MATLAB MATLAB的 table 数据类型的转换...
  • 这里,仅将介绍MATLAB的结构体数据类型 ,转向Python的字典类型。 2. 代码分析 MATLAB的结构体是由一个个field-value对组成,这像极了Python的字典。但是!当你将其保存成.mat文件,然后由Python加载,你会发现,...
  • matlab数据类型

    2014-12-11 15:53:26
    matlab数据类型介绍,展示了数据类型的相互转化方法
  • 一直以来,在使用MATLAB进行运算过程中,经常会用到对图像各种处理,因此需要对图像进行数据转换,因此对经常用到转换进行整理,方便查看。 1、uint8转化为double用来方便图像运算: double函数只是将读入...
  • matlab数据类型 数值型数据 整数型: ...class(x):查看数据x的数据类型 复型: real:求复数的实部 imag:求复数的虚部 字符型数据 用单引号设定,字符创的字符都是字符矩形的元素 字符创的
  • matlab各类数据图像之间转化 rgb类型转化为二值步骤例如以下: 1、採用命令im2double将rgb类型转化三维double >> str='E:\programing\Eigenface_PAC\Face\image_0001.jpg'; >> A=...
  • matlab图像数据类型uint8,double关系

    千次阅读 多人点赞 2019-04-05 20:07:50
    数字图像处理深入思考(一...为了节省存储空间,matlab为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称作8位图像。matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)运...
  • 一、matlab中相关系数计算例:corr1=corrcoef(x,y),结果即为包含x,y相关系数一个2×2矩阵,主对角线为自相关系数1,副对角线为x与y线性相关系数用是pearson相关。corr2=corrcoef(x,y),结果为x与y线性相关...
  • matlab数据类型、函数

    2021-04-01 17:07:55
    1.matlab的数据类型 (1)整型 int8 转化为有符号的8位整型。(最大值为127) unit8 转为无符号的8位整型。(最大值为255) (2)浮点型 class函数 转化为双精度型:如class(4)。 single函数 转化为单精度型:如class...
  • 数值类型:—数值转化函数 整数类型(8/16/32/64位,有/无符号)–转化函数 浮点数类型(单精度、双精度) 无穷量(Inf)\非数值量(NaN) 逻辑类型:logic 关系运算符、逻辑运算符、逻辑测试函数 字符/字符串:...

空空如也

空空如也

1 2 3 4 5 6
收藏数 120
精华内容 48
关键字:

matlab的数据类型转化

matlab 订阅