我希望使用cellfun类似于如何使用bsxfun在nx1单元格和1x1单元格上应用函数,即对于bsxfun,
multi = bsxfun(@times, rand(1,10), 2)
Run Code Online (Sandbox Code Playgroud)
然而,当在cellfun中做这样的事情时,它会抱怨细胞大小不一样.我该如何解决这个问题?
要用于单元格示例:
我的实际问题非常简单,我可以看到其他方法,但我最初的直觉是使用cellfun.不能把我带到这里.这是我的实际问题,
use_var = {[0,1,0,1,1,1,1,0]}; rule_dep = {[1,3],[1,2,4],[3,5,7],[5],[4,8]};
Run Code Online (Sandbox Code Playgroud)
我现在希望每个rule_dep都使用indexuse_var.我的第一次尝试是,
use_rule = cellfun(@(x,y) y{x}, rule_depend, use_var, 'Uniformoutput', false);
Run Code Online (Sandbox Code Playgroud)
但会引发尺寸问题.
诀窍是定义一个函数句柄,它返回任何元素的预期结果 rule_dep
use_var = [0,1,0,1,1,1,1,0] %must be a array, not cell
use_rule = cellfun(@(x) use_var(x), rule_dep, 'Uniformoutput', false)
Run Code Online (Sandbox Code Playgroud)
在cellfun中没有类似单身尺寸扩展的东西.请记住,cellfun和arrayfun通常比for循环慢.最好的解决方案可能是一个简单的循环.