访问基于矩阵的函数输出的列

时间:2015-11-22 00:09:29

标签: matlab

我有一个返回nxk矩阵的函数。假设我想将矩阵的每一列都放到一个不同的变量中,我可以采用一行方式吗?

目前我在做(对于k = 3)

A = MyFunc(...);
x1 = A(:, 1);
x2 = A(:, 2);
x3 = A(:, 3);

我注意到正在做

[x1, x2, x3] = MyFunc(...);

不起作用,但是有什么类似的吗?

2 个答案:

答案 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);

在敲门之前,意识到这几乎肯定比其他任何人的答案更快!