Matlab внешний продукт, как функция?Как? - PullRequest
3 голосов
/ 15 ноября 2011

У меня есть следующее вычисление, которое я хотел бы векторизовать в matlab.

У меня есть массив N x 3, назовите его a. У меня есть массив ячеек функций 4 x 1, вызываю их b.

Я хотел бы создать матрицу Nx4 c, такую, что c(i,j) = b{j}(a(i,:).

b на самом деле является массивом, но я не знаю, как записать свое представление для c в формате, который Matlab поймет, который использует матрицу.

Ответы [ 2 ]

3 голосов
/ 15 ноября 2011

Если ваша функция обрабатывает массивы (т.е. b{j}(a) возвращает массив Nx1 в вашем примере), вы можете использовать CELLFUN и CELL2MAT для генерации выходного массива:

c = cell2mat( cellfun( @(bFun)bFun(a),b,'UniformOutput',false) );

Если ваша функция обрабатывает только отдельные строки (т. Е. b{j} необходимо применять к каждой строке a по отдельности, вы можете добавить ARRAYFUN в микс (ухудшается читаемость)хотя немного, в основном вы применяете каждый элемент b через cellfun к каждой строке a через arrayfun):

c = cell2mat(...
       cellfun( @(bFun)arrayfun(...
            @(row)bFun(a(row,:)),1:size(a,1)),...
       b,'UniformOutput',false) ...
    );
1 голос
/ 17 ноября 2011

pdist2 почти решает проблему выше. Вероятно, кто-то умнее меня сможет понять, как соединить их вместе.

...