代码之家  ›  专栏  ›  技术社区  ›  Christian P.

如何在matlab中计算结构中的属性数?

  •  3
  • Christian P.  · 技术社区  · 15 年前

    我有一个返回一个或多个变量的函数,但是当它改变时(取决于函数是否成功),以下内容不起作用:

    [resultA, resultB, resultC, resultD, resultE, resultF] = func(somevars);
    

    这有时会返回一个错误, varargout 2未定义 ,因为只有第一个变量 resultA 当函数失败时,实际上会给出一个值。相反,我把所有的输出放在一个变量中:

    output = func(somevars);
    

    但是,变量被定义为结构的属性,这意味着我必须用 output.A . 这本身并不是问题,但我需要计算属性的数量,以确定是否得到了正确的结果。

    我试过 length(output) , numel(output) size(output) 无济于事,所以如果有人能巧妙地做到这一点,我将非常感激。

    2 回复  |  直到 7 年前
        1
  •  12
  •   Matthew Flaschen    15 年前
    length(fieldnames(output))
    

    也许还有更好的办法,但我想不起来。

        2
  •  3
  •   Community George Stocker    7 年前

    看起来像 Matthews answer 是解决问题的最佳方法:

    nFields = numel(fieldnames(output));
    

    有一个警告可能不适用于您的情况,但可能很有趣知道:即使结构字段是空的, FIELDNAMES 仍将返回该字段的名称。例如:

    >> s.a = 5;
    >> s.b = [1 2 3];
    >> s.c = [];
    >> fieldnames(s)
    
    ans = 
    
        'a'
        'b'
        'c'
    

    如果你想知道字段的数量 不是空的 ,您可以使用 STRUCTFUN :

    nFields = sum(~structfun(@isempty,s));
    

    或者是 STRUCT2CELL CELLFUN :

    nFields = sum(~cellfun('isempty',struct2cell(s)));
    

    上述两项均返回2的答案,而:

    nFields = numel(fieldnames(s));
    

    返回3。

    推荐文章