【问题标题】:How to make an m x n cellarray from an m x 1 cellarray of 1 x n cellarrays, etc.?如何从 1 x n 单元阵列等的 m x 1 单元阵列制作 m x n 单元阵列?
【发布时间】:2012-09-03 02:46:04
【问题描述】:

[抱歉这个愚蠢的问题。我对 MATLAB 完全陌生(完全被它弄糊涂了)。]

我想写一个函数to2d,它的唯一参数是一个m x 1 个1 x n 个元胞数组,并返回相应的 m x n 元胞数组。

例如,我们会得到如下内容:

>> A = {{1, 2}; {3, 4}; {5, 6}}

A = 

    {1x2 cell}
    {1x2 cell}
    {1x2 cell}

>> B = to2d(A)

B = 

    [1]    [2]
    [3]    [4]
    [5]    [6]

当所有人都知道这些参数存储在某个单元格数组中时,这个问题可能被认为是以编程方式将参数传递给变量参数函数的更一般问题的特殊情况。在 Python 中,通过使用 *-syntax 来实现这一点。例如

func_with_indeterminate_args(*a_runtime_list_of_args)

谢谢!

【问题讨论】:

    标签: matlab


    【解决方案1】:

    cat 函数在做什么:

    >> cat(1,A{:})
    ans = 
        [1]    [2]
        [3]    [4]
        [5]    [6]
    

    【讨论】:

    • @Rody Oldenhuis:适合自己。
    【解决方案2】:

    你的第一个问题很容易回答:

    function B = to2d(B)
        B = cat(1,B{:});
    end
    

    (感谢@Eastsun 使用cat 而不是[B{:}])。

    关于您的第二个问题:任何函数的参数都可以在用户可访问的单元格数组varargin 中捕获和扩展。 nargin 可以访问传递给 any 函数的参数总数。示例:

    function B = to2d(B, varargin)
    
        if nargin == 1
            B = reshape([B{:}], size(B,1),[])
    
        else
            for ii = 1:nargin
                fprintf('Parsing argument %d\n', ii); 
                varargin{ii}
            end
    
        end
    end
    

    然后调用

    >> to2d(B)
    B = 
    
        [1]    [2]
        [3]    [4]
        [5]    [6]
    
    >> to2d(B, [0 0 0])
    Parsing argument 1
    ans = 
        {1x2 cell}
        {1x2 cell}
        {1x2 cell}
    
    Parsing argument 2
    ans = 
        [0 0 0]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 2021-12-31
      相关资源
      最近更新 更多