【发布时间】:2009-07-14 11:19:26
【问题描述】:
例如>>w = whos; 的输出返回一个结构数组。我想构造一个数组,其元素是每个结构中特定字段名称的标量。
这样做最明显的方法不是返回我想要的数组,而是分别返回每个答案。
>> w(1:2).bytes
ans =
64
ans =
128
我可以用循环来做到这一点,但想知道是否有更好的方法。
【问题讨论】:
标签: arrays matlab matlab-struct
例如>>w = whos; 的输出返回一个结构数组。我想构造一个数组,其元素是每个结构中特定字段名称的标量。
这样做最明显的方法不是返回我想要的数组,而是分别返回每个答案。
>> w(1:2).bytes
ans =
64
ans =
128
我可以用循环来做到这一点,但想知道是否有更好的方法。
【问题讨论】:
标签: arrays matlab matlab-struct
在表达式周围加上方括号,即
[w(1:2).bytes]
【讨论】:
访问结构数组的字段将作为输出返回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
【讨论】:
在这种情况下,使用cat 更通用。假设你想对一堆字符串做同样的事情,那么 [ ] 方法将不起作用,你必须使用:
cat(1,w(1:2).class)
在上面的例子中,
cat(1,w(1:2).bytes)
此外,您还希望在 MATLAB 中将内容保留为列,以获得更好的性能。
【讨论】: