arrays - 我如何在 Matlab 中定义结构

标签 arrays matlab data-structures struct

我知道可以通过多种方式定义结构,例如:

  1. 向变量添加字段

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

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

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

最佳答案

您提到您的目标是使用多个相同类型的结构,因此您应该了解可供您使用的主要两种方法以及它们之间的比较:

1) 结构数组

你可以通过动态增长数组来初始化它

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) 数组结构

p.r = [1 0];
p.g = [1 0];
p.b = [1 0];
p.str = {'white' 'black'};

p1 = [p.r(1) p.g(1) p.b(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              

另一方面,由于结构的每个字段都存储为自己的数组,因此您需要强制执行它们必须在长度上匹配这一事实。

如果你想阅读更多相关信息,还有一些帖子:

关于arrays - 我如何在 Matlab 中定义结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7063719/

相关文章:

java - 用于检测重复值与另一个值的高效数据结构

python - 从优先队列中删除一个项目

ios - 使用Swift将一些Class类型的Arraylist转换成JSON格式

php - 从数组中删除元素

Matlab:使用 IMRECT 选择的 ROI 的实时绘图

matlab - 在 MATLAB 中对 HSV 颜色空间建模

java - 为什么相同的值会放入我的 LinkedHashMap 数组中?

python - 自动对数组中的元素进行分类

algorithm - Matlab: react 时间的滴定算法?

python - BST 还是哈希表?