我如何在Matlab中定义一个结构

我知道一个结构可以通过几种方式来定义,例如:

  1. 将字段添加到variables

    p.color.red = .2; p.color.green = .4; p.color.blue = .7; 
  2. 通过赋值定义标量结构

     S = struct('a', 0, 'b', 1, 'c', 2); 

我想要做的是创build一个结构定义(如C)。 我的最终目标是拥有一系列可以迭代并执行testing的结构。 有没有什么办法可以定义一个通用结构,然后创build它的实例? 我应该使用其他机制吗? 我知道MATLAB支持Java,我应该使用类/接口?

与C不同的是,Matlab允许您随时添加或删除结构中的成员。 具有特定字段的结构可以与某些函数一起使用,这更是一个惯例。

所以是的,这是创build结构的两种基本方式。 当然,你总是可以在一个* .m文件中写一个函数,为你创build一个包含特定字段的结构。 或者如果你想获得更多的面向对象,请看这里

你提到你的目标是使用相同types的几个结构,因此你应该知道你可以使用的两种方法,以及它们如何比较:

1)结构arrays

您可以通过dynamic增长数组来初始化它

 p(1).str = 'white'; p(1).r = 1; p(1).g = 1; p(1).b = 1; p(2).str = 'black'; p(2).r = 0; p(2).g = 0; p(2).b = 0; 

但是,通过预先分配数组,总是更好的办法

 p = repmat( struct('r',[], 'g',[], 'b',[], 'str',[]), 1, 10); 

预先分配的另一个技巧:

 p(10) = struct('r',[], 'g',[], 'b',[], 'str',[]); 

甚至在初始化时给出所有的值:

 p = struct('r',{1 0}, 'g',{1 0}, 'b',{1 0}, 'str',{'white' 'black'}); 

一个简单的方法来填充值

 names = {'white' 'black'}; [p(1:2).str] = names{:}; red = num2cell([1 0]); [p(1:2).r] = red{:}; 

以下是您如何检索一个字段的所有值:

 red = [p(:).r]; names = {p(:).str}; 

2)arrays的结构

 pr = [1 0]; pg = [1 0]; pb = [1 0]; p.str = {'white' 'black'}; p1 = [pr(1) pg(1) pb(1)]; 

这样做的好处是结构只是一个指针数组(r,g,b,str分别存储在内存中)。 比较这与以前的方法,我们有一个结构的数组,每个结构都有指向其字段的指针(有相当多的内存开销):

 >> s1 = repmat( struct('r',0, 'g',0, 'b',0), 1, 1000); >> s2 = struct('r',zeros(1,1000), 'g',zeros(1,1000), 'b',zeros(1,1000)); >> whos Name Size Bytes Class Attributes s1 1x1000 204192 struct s2 1x1 24372 struct 

另一方面,由于结构中的每个字段都是以自己的数组forms存储的,因此您需要强制匹配的长度。

其他一些post,如果你想阅读更多关于这个:

  • MATLAB基础:数组结构与数组结构
  • 结构初始化