当输入数组大小不同时,如何使用cellfun
(或适当的替代方法),并获得结果的所有组合(即,针对数组的交叉联接进行求值)?
这个例子使用了一个伪函数;实际的函数更复杂,所以我在寻找调用定制函数的答案。使用MatLab R2018a,所以我正在寻找一个与之兼容的答案。
a = 0:0.1:0.3; b = 100:5:120;
test = cellfun(@(x,y) myfunc(x,y,0), num2cell(a), num2cell(b));
function [result] = myfunc(i, j, k)
% k is needed as fixed adjustment in "real life function"
result = 0.1 * i + sqrt(j) + k;
end
上面的代码返回以下错误:
Error using cellfun
All of the input arguments must be of the same size and shape.
Previous inputs had size 4 in dimension 2. Input #3 has size 5
本例的预期输出是下面的“Result”列;为方便起见,这里显示了i和j。
I|j|结果
-|-|
0|100|10
0.1|100|10.01
0.2|100|10.02
0.3|100|10.03
0|105|10.24695077
0.1|105|10.25695077
0.2|105|10.26695077
0.3|105|10.27695077
0|110|10.48808848
ETC|ETC|ETC
1条答案
按热度按时间nuypyhwy1#
这里的答案是
bsxfun
。下面是一个有效的例子。bsxfun
执行以下操作:在这种情况下,结果是:
要获得请求的表单中的输入,只需运行
c(:)
即可。历史笔记:
回到以前的时代,我们不得不更频繁地使用
bsxfun
。现在,当我们对数字执行简单的运算时,MatLab在没有通知的情况下扩展了一维。例如,我过去经常使用以下风格:而现在,我们只需写道: