我有以下代码:
function y = f(x)
y = some_black_box_function_that_takes_only_one_row_at_once(x)
end
x = magic(15);
y = zeros(1,15);
for i = 1:15
y(i) = f(x(i,:));
end
我想摆脱出于并行目的的循环。我想使用类似arrayfun
的东西,除了应该将其应用于矩阵的每一行而不是应用于矩阵的每个元素。
如何在MATLAB中实现这一目标?
P.S。无法编辑some_black_box_function_that_takes_only_one_row_at_once
以接受2D矩阵。
答案 0 :(得分:2)
要针对一系列非标量参数而不是像arrayfun
那样对数组的每个标量元素调用函数,请改用cellfun
。
要将矩阵中的每一行提取到cellfun
可以作为函数参数传递的单元格中,请在维度num2cell
上使用2
;即:
y = cellfun(@some_black_box_function_that_takes_only_one_row_at_once, num2cell(x,2));
我不知道这实际上是否可以按照您的意图促进并行化,但是在问题中的代码不令人满意并且解决方案必须采用请求的形式的情况下,这就是您的处理方式