【问题标题】:Too many output arguments输出参数过多
【发布时间】:2014-05-22 07:39:54
【问题描述】:

我在 MATLAB 中不是一个非常铁杆的编码员,我从 youtube 和书籍中学到了所有东西。这可能是一个非常简单的问题,但我不知道要寻找什么答案。

在 MATLAB 中,我正在尝试做这样的事情。

>>[a,b,c] = [1,2,3]

我想要这样的输出。

>> a = 1 
b = 2
c = 3

所以基本的问题是: - 用户将在代码开始时定义变量矩阵([a,b,c]),并且在代码处理过程中将显示类似的矩阵,并作为输入询问矩阵( [1,2,3])。如果不编写循环代码,我不知道该怎么做,我将从变量矩阵中获取每个变量,并通过 eval 函数将值保存在该变量中。

上面写的代码是错误的,我知道,我可以用“for”循环和“eval”函数来做到这一点。

但问题是没有。变量(a,b,c)永远不会是常数,我想知道 MATLAB 中是否存在比 for 循环更好的内置函数或方法。

正如我之前所说,我不知道如何搜索此类问题,而且这是一个非常常见的问题。 无论哪种方式,如果您至少可以告诉我要搜索什么或将我重定向到相关问题,我都会很高兴。

如果您想了解更多信息或进行任何更正,请写信。

谢谢。

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    deal 函数可以对固定数量的输入执行此操作:

    [A,B,C]=deal(1,2,3)
    

    如果您事先不知道会得到多少输入,则必须做一些鬼混。这是我想出的:

    V=[1,2,3,4,5,6,7]
    if length(V)>1
        for i=1:length(V)
            S{i}=['A' num2str(i)];
            G{i}=['V(' num2str(i) ')'];
        end
        T=[S{1} ','];
        R=[G{1} ','];
        for i=2:length(V)-1
            T=[T S{i} ','];
            R=[R G{i} ','];
        end
        T=[T S{length(V)}];
        R=[R G{length(V)}];
        eval(['[' T ']=deal(' R ')'])
    else
        A1=V
    end
    

    但是当你不知道有多少时处理A1,...,An会很痛苦!

    【讨论】:

      【解决方案2】:

      这在某种程度上被称为“元组解包”(至少这是我在 python 中搜索的内容!)。我可以找到this thread,它解释说您可以在 Octave 中执行此操作(我检查过,它也可以在 Matlab 中使用)。您必须先将向量转换为元胞数组:

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

      【讨论】:

      • 谢谢哥们,它也适用于我的代码。你帮我省了很多麻烦。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 2017-04-23
      相关资源
      最近更新 更多