【问题标题】:MATLAB: collect from array of structsMATLAB:从结构数组中收集
【发布时间】:2009-07-14 11:19:26
【问题描述】:

例如>>w = whos; 的输出返回一个结构数组。我想构造一个数组,其元素是每个结构中特定字段名称的标量。

这样做最明显的方法不是返回我想要的数组,而是分别返回每个答案。

>> w(1:2).bytes
ans =
    64
ans =
   128

我可以用循环来做到这一点,但想知道是否有更好的方法。

【问题讨论】:

    标签: arrays matlab matlab-struct


    【解决方案1】:

    在表达式周围加上方括号,即

    [w(1:2).bytes]
    

    【讨论】:

      【解决方案2】:

      访问结构数组的字段将作为输出返回comma-separated list(或CSL)。换句话说,您的示例的输出:

      w(1:2).bytes
      

      相当于打字:

      64, 128
      

      因此,您可以在任何可以使用 CSL 的地方使用输出。下面是一些例子:

      a = [w(1:2).bytes];         % Horizontal concatenation = [64, 128]
      a = horzcat(w(1:2).bytes);  % The same as the above
      a = vertcat(w(1:2).bytes);  % Vertical concatenation = [64; 128]
      a = {w(1:2).bytes};         % Collects values in a cell array = {64, 128}
      a = zeros(w(1:2).bytes);    % Creates a 64-by-128 matrix of zeroes
      b = strcat(w.name);         % Horizontal concatenation of strings
      b = strvcat(w.name);        % Vertical concatenation of strings
      

      【讨论】:

        【解决方案3】:

        在这种情况下,使用cat 更通用。假设你想对一堆字符串做同样的事情,那么 [ ] 方法将不起作用,你必须使用:

        cat(1,w(1:2).class)
        

        在上面的例子中,

        cat(1,w(1:2).bytes)
        

        此外,您还希望在 MATLAB 中将内容保留为列,以获得更好的性能。

        【讨论】:

        • 如果字符串长度不同,上面的代码会报错。在这种情况下,您应该使用 STRVCAT。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多