我在Matlab中有一个函数:
function [runs,balls]=batting(form,team_flag,weather_flag)
form
是1x13
双打数组。标志只是布尔值。 runs,balls
只是标量。上面的函数进行了一些复杂的数学模拟以得出其输出值。现在我写一个包装器:
function [runs,balls]=wrapper1(form)
[runs,balls]=batting(form,false,false);
然后我写了另一个包装器:
function runs_vector=wrapper2(form_vector)
for i=1:size(form_vector,1)
form_cell{i}=form_vector(i,:);
end
runs_vector=cellfun(@wrapper1, form_cell)';
我必须明白我想要实现的目标。我正在尝试将cellfun
的行为用于我的自定义函数batting
。这里的标志参数需要设置为false,但一般来说,它们在项目中是不同的。所以我不能在没有编写中间包装的情况下消除batting
函数的标志输入,即。 wrapper1
。我的问题是,如果有一个不那么丑陋或更聪明的方法吗?
答案 0 :(得分:2)
您可以通过创建一个将wrapper1
减少为两个参数的匿名函数来消除batting
:
runs_vector = cellfun(@(form) batting(form, false, false), form_cell)';
此外,循环可以替换为num2cell
,如下所示:
form_cell = num2cell(form_vector, 2);
将这两者结合起来给我们
function runs_vector = wrapper2(form_vector)
form_cell = num2cell(form_vector, 2);
runs_vector = cellfun(@(form) batting(form, false, false), form_cell)';