【问题标题】:Is there anything like deal() for normal MATLAB arrays? [duplicate]对于普通的 MATLAB 数组,有没有类似 deal() 的东西? [复制]
【发布时间】:2011-02-14 00:06:38
【问题描述】:

可能重复:
How do I do multiple assignment in MATLAB?

在处理单元格数组时,可以使用deal()函数将单元格赋值给输出变量,如:

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

或者只是:

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

我想对一个简单的数组做同样的事情,比如:

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

但这不起作用。有什么办法?

【问题讨论】:

  • 我觉得这个问题听起来很熟悉,但我花了一些时间才找到重复的:stackoverflow.com/questions/2337126/…。我想当我有机会时,我会尝试更好地标记这些问题。

标签: arrays matlab variables variable-assignment


【解决方案1】:

不是很漂亮,但是:

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

【讨论】:

  • 实际上,从头开始,arrayfun 调用与num2cell 的作用基本相同。
  • 这里有一个用于更短的数组/单元格/Xfun 调用的技巧:您可以让匿名函数返回一个单元格,而不是 'UniformOutput',false。 c = arrayfun(@(x) {x}, myArray)
【解决方案2】:

一种选择是首先使用NUM2CELL 将您的数组转换为元胞数组:

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

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

【讨论】:

  • 这不是单行吗? [a,b,c] = num2cell(myArray){:}
  • @mtrw:不,会引发此错误:??? Error: ()-indexing must appear last in an index expression.
  • 哦,有趣。它在八度音程中工作。我猜 FOSS 版本买不起临时变量。
猜你喜欢
  • 2011-09-25
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多