запуск функции в каждой ячейке матрицы, зная индекс ячейки, без использования циклов - PullRequest
0 голосов
/ 30 августа 2011

У меня есть функция F, которая получает двумерный индекс (i и j) и постоянный массив C. Я хочу запустить эту функцию для каждой ячейки в матрице, то есть в ячейке (i, j) яимеют значение F (i, j, C).

Есть ли способ сделать это в Matlab без использования циклов?

1 Ответ

1 голос
/ 30 августа 2011

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

m = [1:3; 4:6];
arrayfun(@(x) x + 1, m)

Чтобы использовать arrayfun, вам нужно изменить сигнатуру вашей функции F, чтобы она принимала элемент в вашей матрице в (i, j), а не сами индикаторы.

Кроме того, чисто векторизованное решение часто быстрее, чем arrayfun. Например, сравнить

tic; for(i = 1:1000); mean(m(:)); end; toc
tic; for(i = 1:1000); arrayfun(@mean, m); end; toc
...