在需要矩阵行的函数上应用arrayfun

时间:2018-09-04 08:56:26

标签: matlab

我有以下代码:

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矩阵。

1 个答案:

答案 0 :(得分:2)

要针对一系列非标量参数而不是像arrayfun那样对数组的每个标量元素调用函数,请改用cellfun

要将矩阵中的每一行提取到cellfun可以作为函数参数传递的单元格中,请在维度num2cell上使用2;即:

y = cellfun(@some_black_box_function_that_takes_only_one_row_at_once, num2cell(x,2));

我不知道这实际上是否可以按照您的意图促进并行化,但是在问题中的代码不令人满意并且解决方案必须采用请求的形式的情况下,这就是您的处理方式