0

既存のマトリックスの列から新しいベクトルを作成したいと思います。私のコードは次のようになります:

Matrix=[1 2 3;4 5 6;7 8 9];
A=Matrix(:,1);
B=Matrix(:,2);
C=Matrix(:,3);

特に列の数が多い場合、このコードはあまりエレガントではないことがわかります。そのため、次のようなものを探しています。

[A B C]=Matrix;

しかし、Matlabは、行列を複数の値に割り当てることはできないと述べました。別の方法はありますか?

4

2 に答える 2

2

mat2cellを使用して元の行列を分割し、分割されデータを結果変数A、B、およびCに割り当てます。

m = mat2cell(Matrix,size(Matrix,1),ones(1,size(Matrix,2)))
[A,B,C] = deal(m{:})

残念ながら、中間変数が必要です(ただし、ワンライナーが好きな場合は、これを解決するFEX関数dealcellがあります)

于 2012-07-30T18:58:53.870 に答える
-1

なぜあなたはこれをしたいのですか?(ちょうど好奇心が強い)Matlabはマトリックスから機能するように設計されています。したがって、名前はMatrix Labratory ...ですが、残念ながらそれでも可能です。

もっとエレガントな解決策があると確信していますが、それについて考えさせていただきます。これでうまくいくはずです。

Matrix=[1 2 3;4 5 6;7 8 9];

for i=1:size(Matrix,2) %number of rows
  eval(sprintf('A%d = Matrix(:,i)', i));
end

A1 =

 1
 4
 7

A2 =

 2
 5
 8

A3 =

 3
 6
 9
于 2012-07-30T19:03:15.080 に答える