2009-07-14 91 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