3

Matlabの新機能はC/C++から来ています......

オブジェクトの配列があり、配列内のすべてのオブジェクトの値にアクセスして、それらを1つの変数に連結しようとしています。

Class sample 
   properties(GetAccess = 'public', SetAccess ='public')
     ID;
     Value;
   end

   methods 
        function obj = sample(id, value)
            obj.ID = id;
            obj.Value = value;
         end
   end
end 

次に、いくつかのオブジェクトを含むマトリックスを作成します。

x = sample.empty(3,0);
x(1) = sample(1,3);
x(2) = sample(1,4);
x(3) = sample(1,5);

次に、オブジェクトからすべての値を取得して、それらを新しい配列に格納します。

y = x(:).Value;

ただし、これは失敗し、x(3)の値をy.....に入れるだけです。

y(:) = x(:).Value; 

エラーをスローします。

どんな助けでもいただければ幸いです。私はループでこれを行うことができることを知っていますが、私はそれを最も速くそして最も効率的な方法でやろうとしています。

4

1 に答える 1

5

シンプルだが直感的ではない

y=[x.Value]

なんで?Wellx.Valueは連続したメモリブロックではないため、配列に直接割り当てることはできません。呼び出しは、各オブジェクトから順番x.ValueにValueデータメンバーを返します。xMatlabは、これを個別の操作として扱います。呼び出しを囲むことにより、[]matlabに、各結果を連結して連続した配列を作成するように指示します。次に、これをdoubleの配列に割り当てることができますy

編集:

あなたのコメントに関して、上記のコードは、xが異なるオブジェクトで異なる長さである場合に正常に機能します。。

x(1) = sample(1,3);
x(2) = sample(1,[4 5 6]);
x(3) = sample(1,[20 10]);

それで

>> [x.Value]

ans =

     3     4     5     6    20    10

'y'を、C ++のベクトルのベクトルで可能なように、不規則な終了ベクトルにしたい場合は、セル配列表記(中括弧)を使用する必要があります。

>> y = {x.Value}

y = 

    [3]    [1x3 double]    [1x2 double]
于 2013-02-20T18:04:37.780 に答える