使用Cellfun多次在单个阵列上执行功能

Lit*_*les 2 matlab

我希望使用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)

但会引发尺寸问题.

Dan*_*iel 5

诀窍是定义一个函数句柄,它返回任何元素的预期结果 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循环慢.最好的解决方案可能是一个简单的循环.