我有一个返回nxk矩阵的函数。假设我想将矩阵的每一列都放到一个不同的变量中,我可以采用一行方式吗?
目前我在做(对于k = 3)
A = MyFunc(...);
x1 = A(:, 1);
x2 = A(:, 2);
x3 = A(:, 3);
我注意到正在做
[x1, x2, x3] = MyFunc(...);
不起作用,但是有什么类似的吗?
答案 0 :(得分:0)
您可以将函数的输出转换为单元格,然后使用deal
将其分配给多个数组:
A = MyFunc(...);
Acell = mat2cell(A,size(A,1),ones(1,size(A,2)));
[x1, x2, x3] = deal(Acell{:});
这将根据其列将A
切割为单元格数组,但是deal
左侧必须具有相同数量的变量。
或者,您可以决定如何使用mat2cell
剪切列。例如,您可以将大小为[5,6]
的数组切割为大小为[5,2]
,[5,3]
和[5,1]
且mat2cell(A,size(A,1),[2 3 1]);
的数组。
答案 1 :(得分:0)
不要加入一线编程崇拜,牺牲可读性和性能,以便尽可能少地使用线条!
除非你有大量的变量,否则就这样做:
A = MyFunc(...);
x1 = A(:, 1);
x2 = A(:, 2);
x3 = A(:, 3);
每个人都可以立即阅读它。但是如果你已经是邪教成员并且只有GOT将它放在一行:
A=MyFunc(...);x1=A(:, 1);x2=A(:, 2);x3=A(:,3);
在敲门之前,意识到这几乎肯定比其他任何人的答案更快!