2009-07-14 95 views
2

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

这样做的最明显的方式是不会按照我的意愿返回数组,但每个答案都是分开的。

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

我可以做一个循环,但想知道是否有更好的方法。

回答

10

将方括号的表达,即

[w(1:2).bytes] 
+0

美丽,谢谢! – second 2009-07-14 13:20:14

2

在这样的情况下,使用cat是更通用的。假设你想要做同样的一串字符串,然后按[]方法是行不通的,而你不得不使用:

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

而在上述情况下,

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

此外,你希望将东西保存为MATLAB中的列以获得更好的性能。

+0

如果字符串长度不一样,上面的代码将会引发错误。在这种情况下,您应该使用STRVCAT。 – gnovice 2009-07-14 14:24:33

6

访问结构数组的字段将作为输出返回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