Примените arrayfun к функции, которая нуждается в строке матрицы - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть следующий код:

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 голосов
/ 04 сентября 2018

Чтобы вызвать функцию с набором нескалярных аргументов, а не с каждым скалярным элементом массива, как это делает arrayfun, используйте вместо этого cellfun.

Чтобы извлечь каждую строку из матрицы в ячейки, которые cellfun может передать в качестве аргументов вашей функции, используйте num2cell вдоль измерения 2; i.e.:

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

Мне неизвестен какой-либо смысл, в котором это фактически облегчает распараллеливание, как ваше заявленное намерение, но поскольку код в вопросе не является удовлетворительным, и решение должно принять запрошенную форму, именно так вы и сделаете это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...