2009-07-14 9 views
2

たとえば、>>w = whos;の出力は構造体の配列を返します。私は各構造体の特定のフィールド名からのスカラーを要素とする配列を作成したいと考えています。MATLAB:構造体の配列から収集

これを行う最も明白な方法は、私が望むように配列を返しませんが、それぞれ別々に答えます。

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

私はループで行うことができましたが、より良い方法があるかどうか疑問に思っていました。式周り

答えて

10

入れ角括弧、catを使用してこのような状況では、すなわち

+0

美しい、ありがとう! – second

2
[w(1:2).bytes] 

は、より一般的な目的です。その後、[]メソッドは機能しないだろう、とあなたが使用する必要があるだろう、あなたは文字列の束と同じことをやってみたかったとします

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

そして、上記の場合、

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

さらに、パフォーマンスを向上させるために、MATLABの項目として項目を保持したいと考えています。

+0

文字列が同じ長さでない場合、上記のコードはエラーをスローします。そのような場合にはSTRVCATを使用するべきです。 – gnovice

+0

ありがとう!ちゃんと覚えておきますよ。 – Jacob

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