1

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

我想编写一个函数,将 1 x n单元阵列的m x 1 单元阵列to2d作为其唯一参数,并返回相应的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 中,通过使用 - 语法来做到这*一点。例如

func_with_indeterminate_args(*a_runtime_list_of_args)

谢谢!

4

2 回答 2

3

函数cat在做什么:

>> cat(1,A{:})
ans = 
    [1]    [2]
    [3]    [4]
    [5]    [6]
于 2012-09-03T04:25:56.373 回答
1

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

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

(感谢@Eastsun 使用 ofcat而不是[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]
于 2012-09-03T04:25:37.320 回答