2012-09-03 91 views
1

[抱歉,愚蠢的问题。我完全新的MATLAB(和它完全不知所措)。]如何从1 x n cellarrays等m x 1 cellarray做一个m x n cellarray?

我想编写一个函数to2d,以作为其唯一参数1×ň cellarrays的 X 1 cellarray,并返回相应的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中,通过使用* -syntax来做到这一点。例如。

func_with_indeterminate_args(*a_runtime_list_of_args) 

谢谢!

回答

3

究竟是什么功能cat做:

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

@Rody Oldenhuis:随你便。 – Eastsun

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] 
相关问题