【问题标题】:How to pass multiple output from function into cell array如何将多个输出从函数传递到单元格数组
【发布时间】:2013-03-09 13:34:08
【问题描述】:

我有一个具有以下原型的函数

function [bandwidth,density,X,Y,x,y]=kde2d(data,n,MIN_XY,MAX_XY)

该函数基本上返回 6 个输出,其中一些是向量形式,而另一些是数字量。如何优雅地将函数的输出传递到 1 x 6 元胞数组?

【问题讨论】:

    标签: matlab cell


    【解决方案1】:

    怎么样

    [a{1:6}] = kde2d( data, n, MIN_XY, MAX_XY )
    

    编辑

    考虑一下这个烦人的功能

    def foo(n):
      if n == 1:
        return [1, ]
      elif n == 2:
        return [1, ], {'a': 2}
      elif n == 3:
        return [1, ], {'a': 2}, (3, 3, 3)
      return [1, ], {'a': 2}, (3, 3, 3), None
    

    您始终可以将所有输出放入一个元组中:

    for i in range(1, 5):
      f = foo(i)
      print('got {} outputs: {}'.format(len(f), f))
    

    这个简单循环的输出是:

    got 1 outputs: [1]
    got 2 outputs: ([1], {'a': 2})
    got 3 outputs: ([1], {'a': 2}, (3, 3, 3))
    got 4 outputs: ([1], {'a': 2}, (3, 3, 3), None)
    

    如果你想得到一个特定的输出:

    f = foo(2)
    f[1]   # accessing the second output, {'a': 2} in this example.
    

    【讨论】:

    • 不知道函数输出的个数怎么办?
    • @HosseinRahimi 我认为您可以简单地将输出转换为单个变量,然后查询其len
    • 假设我们有一个名为 [out1, out2, out3, ...] = foo() 的函数。 foo() 可以有从 1 到 10 的任意数量的输出(基于输入和 nargout)。无论输入如何,我都需要获得函数的所有可用输出。
    • 例如,使用您上面提到的方法,我们有 3 种可能的情况,1.如果 nargout==6:我们得到 out 函数的前 6 个输出 2.如果 nargout6: 我们不会得到所有的输出 (nargout: number of arg out)
    猜你喜欢
    • 2022-01-09
    • 2020-07-17
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多