我想从现有矩阵的列创建新的向量。我的代码如下:
Matrix=[1 2 3;4 5 6;7 8 9];
A=Matrix(:,1);
B=Matrix(:,2);
C=Matrix(:,3);
我看到这段代码不是很优雅,特别是如果我有大量的列,这就是为什么我要找的东西:
[A B C]=Matrix;
但Matlab表示矩阵不能分配给多个值。还有另一种方式吗?
答案 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