[抱歉这个愚蠢的问题。我对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)
谢谢!
答案 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]