代码之家  ›  专栏  ›  技术社区  ›  Jader Dias

在matlab中,我应该对不同对象的集合使用什么?

  •  2
  • Jader Dias  · 技术社区  · 14 年前

    这在Matlab中是非法的

    a = [[1];[2 3]]
    

    我在Matlab中找到了同样的方法:

     a = {[1];[2 3]}
    

    如何用固定大小(比如100)初始化这样的变量而不必编写太多代码?

    3 回复  |  直到 14 年前
        1
  •  4
  •   Jonas    14 年前

    它被称为单元数组。

    您可以使用命令初始化它 cell

    cellArray = cell(3,2); %# this makes a 3-by-2 cell array
    

    另一种存储不同对象集合的方法是 struct ,你可以这样初始化它

    myStruct = struct('firstField',1,'secondField',[2 3])
    

    与单元格相比,结构的优势在于字段是命名的,这使得处理和记录变得更加容易。如果您希望经常操作数据,单元格可以非常方便地存储数据,因为您可以使用 cellfun 和他们一起。我发现自己经常使用单元格将数据保存在函数中,但使用结构(或对象)在函数之间传递数据。

    另外,如果您有一个数字列表,并希望将它们分布到单元格数组的元素中,则可以使用 num2cell ,它将数组的每个元素分别放入单元格数组的一个元素中,或 mat2cell

    a = {1,[2 3]}
    

    相当于

    b = mat2cell([1 2 3],[1 1],[1 2]);
    
        2
  •  2
  •   Jader Dias    14 年前

    或者,我可以通过键入来发现花括号的含义

    help paren
    

    哪些输出:

    {}大括号用于形成单元格数组。它们类似于 方括号[],但保留嵌套级别。 {magic(3)6.9'hello'}是一个包含三个元素的单元格数组。
    {'This''是''a';'two''行''cell'}是一个2乘3的单元格数组。 分号结束第一行。{1{23}4}是3元素 单元格数组,其中元素2本身是单元格数组。

     Braces are also used for content addressing of cell arrays.
      They act similar to parentheses in this case except that the
      contents of the cell are returned. 
    
     Some examples:
         X{3} is the contents of the third element of X.
         X{3}(4,5) is the (4,5) element of those contents.
         X{[1 2 3]} is a comma-separated list of the first three
         elements of X.  It is the same as X{1},X{2},X{3} and makes sense
         inside [] ,{}, or in function input or output lists (see LISTS).
    
     You can repeat the content addressing for nested cells so
      that X{1}{2} is the contents of the second element of the cell
      inside the first cell of X.  This also works for nested
      structures, as in X(2).field(3).name or combinations of cell arrays
      and structures, as in  Z{2}.type(3).
    
        3
  •  0
  •   Oliver Charlesworth    14 年前

    那是一个 cell array