有没有类似于deal()函数的东西适用于普通的MATLAB数组?

8

可能是重复问题:
如何在MATLAB中进行多重赋值?

当处理单元数组时,我可以使用deal()函数将单元格分配给输出变量,例如:

[a, b, c] = deal(myCell{:});

或者仅仅是:

[a, b, c] = myCell{:};

我希望对一个简单的数组进行相同的操作,比如:

myArray = [1, 2, 3];
[a, b, c] = deal(myArray(:));

但这并不起作用。有什么替代方案吗?

4
我觉得这个问题听起来很熟悉,但我花了一些时间才找到重复的内容:https://dev59.com/TnE95IYBdhLWcg3wXs2R。我想我有机会时会尝试更好地标记这些问题。 - gnovice
2个回答

10

一个选择是首先使用NUM2CELL将数组转换为单元数组:

myArray = [1, 2, 3];
cArray = num2cell(myArray);
[a, b, c] = cArray{:};

正如您所提到的,您甚至不需要使用DEAL函数来分发单元格内容。


1
这不是一行代码吗?[a,b,c] = num2cell(myArray){:} - mtrw
@mtrw:不,那会抛出这个错误:??? Error: ()-索引必须出现在索引表达式的最后。 - gnovice
1
哦,有趣。它在Octave中可以工作。我猜开源版本买不起一个临时变量。 - mtrw

0

不是非常漂亮,但是:

myArray = 1:3;
c = arrayfun(@(x) x, myArray , 'UniformOutput', false); 
c{:}

1
实际上,撇开那个不谈,arrayfun 调用基本上和 num2cell 执行的是相同的操作。 - Richie Cotton
1
这里有一个缩短数组/单元/Xfun调用的技巧:您可以使用匿名函数返回一个单元格,而不是使用“UniformOutput”,false。 c = arrayfun(@(x) {x}, myArray) - Andrew Janke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接