Внешний продукт Matlab, подобный функции? Как?

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

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

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

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


person John    schedule 15.11.2011    source источник


Ответы (2)


Если ваша функция обрабатывает массивы (например, 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) ...
    );
person Jonas    schedule 15.11.2011

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

person John    schedule 17.11.2011