如何从1 x n cellarray等的m x 1单元阵列制作m x n cellarray?

时间:2012-09-03 02:46:04

标签: matlab

[抱歉这个愚蠢的问题。我对MATLAB完全不熟悉(并且完全被它迷惑了。)

我想编写一个函数to2d,将 m x 1 cellarray的1 x n cellarray作为其唯一参数,并返回相应的< em> m x n cellarray。

例如,我们会得到类似的东西:

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

A = 

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

>> B = to2d(A)

B = 

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

这个问题可能被认为是一个特殊情况,即当所有人都知道这些参数是存储在某些cellarray中时,以编程方式将参数传递给变量参数函数这一更普遍的问题。在Python中,可以使用* - 语法来完成此操作。 E.g。

func_with_indeterminate_args(*a_runtime_list_of_args)

谢谢!

2 个答案:

答案 0 :(得分:3)

函数cat正在做什么:

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

答案 1 :(得分:1)

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

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

(感谢@Eastsun使用cat代替[B{:}])。

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

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]