C#和Matlab混合编程数据类型转换_学习笔记2

来源:互联网 时间:1970-01-01

C#和Matlab混合编程数据类型转换_学习笔记2,有需要的朋友可以参考下。

学习视频下载地址:国内第一部C#.Net调用Matlab混合编程视频教程.

该博客博主也有许多其他关于C#和Matlab混合编程的资料,大家可以去看看其他博文。

我现在贴出自己的视频第4集的学习笔记。大家可以参照注释部分理解程序,以及C#和matlab数据转换。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using MathWorks.MATLAB.NET.Arrays;using MathWorks.MATLAB.NET.Utility;namespace Test1{ class Program {static void Main(string[] args){//本节讲解Char,Struct和Cell类型的定义。//重点讲解MWArray//隐式转换。MWCharArray str = "Hello Matlab.NET!";//str为1行17列。MWCharArray str1 = new MWCharArray(new string[] { "my", "name", "yours" });//str1位3行5列。//这种传递方式一般用来传递路径之类的。//打印出来显示。Console.WriteLine(str1.ToString());//Console.ReadKey();//也可以通过下标访问数组内容:显示如下://注意:C#中数组下标从0开始。Matlab中从1开始。在MWCharArray遵从Matlab规则。Console.WriteLine(str1[2, 3]);Console.ReadKey();//Struct的定义//new MWStructArray有4个重载。使用第3个:MWStructArray(int[] dimension,string[] fieldNames)。MWStructArray ma = new MWStructArray(new int[] {2,2},new string []{"Name","Age"});//ma为2行2列。//元素赋值。ma["Name", new int[] { 1, 1 }] = "Tom";ma["Age", new int[] { 1, 1 }] = 18;ma["Name", new int[] { 2, 2 }] = "Jim";ma["Age", new int[] { 2, 2 }] = 24;//元素访问,显示Console.WriteLine(string.Format("姓名:{0},年龄:{1}",ma["Name",new int[]{1,1}].ToString(),ma["Age",new int[]{1,1}].ToString()));Console.WriteLine(string.Format("姓名:{0},年龄:{1}", ma["Name", new int[] { 2, 2 }].ToString(), ma["Age", new int[] { 2, 2 }].ToString()));Console.ReadKey();//cell类型,最复杂类型,功能最强大的一个类型。//功能强大,使用起来也有一定的要求。//定义cell类型:3行4列MWCellArray cell = new MWCellArray(3, 4);//第1行1列赋值:cell[1, 1] = (MWNumericArray)new int[] { 1, 2, 3, 4 };//cellArray可以存放任何MWArray类型里面的类型,而不是C#里面的类型。//因此,上述如果不进行类型转换为,直接new int赋值会出错。cell[1, 2] = "I love Matlab";//字符串赋值。cell[1, 3] = ma;//结构体赋值。//计算得到的MWArray类型的数据,如何转化到C#中。//m函数计算得到的值得类型?应该要清楚,混编之前,就要测试m函数的可用性,就已经知道它的返回类型了。//假设M函数返回N为MWArray类型。想转换为C#中的double和int型:MWArray N = 5;//先强制转换为MWNumericArray类型,在转化为double和int类型。double n = ((MWNumericArray)N).ToScalarDouble();int n1 = ((MWNumericArray)N).ToScalarInteger(); //要转化为C#中的string的方法:MWArray s = "I love Matlab";string str2 = ((MWCharArray)s).ToString();//显示出来:Console.WriteLine(str2);//假设M函数返回MWNumericArray类型的矩阵,如何转化为C#中的矩阵?MWArray m1 = (MWNumericArray)new double[2, 2] { { 2.1, 3.6 }, { 5.6, 8.8 } };//转化为Array类型。Array t1 = m1.ToArray();//转化为double类型。前置强制转换(C#中的基础操作):double[,] t2 = (double[,])t1;//上述两步合并在一起简写(t3与t2等价):double[,] t3 = (double[,])m1.ToArray();//实验toScalarDouble和tovector转换结果://在C#中不知道数值具体类型时,用var通用型代替:var m2 = ((MWNumericArray)m1).ToScalarDouble();//实验结果表明仅将m1中第一个元素转化为double数值。//故也可以直接写作:double m2 = ((MWNumericArray)m1).ToScalarDouble();var m3 = ((MWNumericArray)m1).ToVector(MWArrayComponent.Real);//实验结果表明,将m1矩阵转化为一维向量(按列来);Real表示实数。一般都用Real。//也可以写作:Array m3 = ((MWNumericArray)m1).ToVector(MWArrayComponent.Real);//可以继续得将Array类型转换为double类型:double[] m4 = (double[])m3;//注意与上面的t2的区别:t1为2维所以要用[,],而m3为1维,所以用[]。Console.ReadKey();} }}
关于matlab生成com组件,可以参照我的=一篇博文【C#与Matlab混合编程:使用Matlab DeployTool生成.Net组件】过程中遇到的问题以及解决。
C#和Matlab数据转换第一节课程,可以参看我的前一篇博文:C#和Matlab混合编程数据类型转换_学习笔记1


版权声明:本文为博主原创文章,未经博主允许不得转载。



相关阅读:
Top