从现有矩阵的列创建新向量

时间:2012-07-30 18:49:13

标签: matlab vector matrix assign

我想从现有矩阵的列创建新的向量。我的代码如下:

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

我看到这段代码不是很优雅,特别是如果我有大量的列,这就是为什么我要找的东西:

[A B C]=Matrix;

但Matlab表示矩阵不能分配给多个值。还有另一种方式吗?

2 个答案:

答案 0 :(得分:2)

使用mat2cell拆分原始矩阵和deal,将拆分数据分配给结果变量A,B和C:

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

不幸的是需要中间变量(但是如果你喜欢单行的话,还有FEX函数dealcell可以解决这个问题)

答案 1 :(得分:-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