Есть ли двумерный эквивалент 'map' в Matlab? - PullRequest
2 голосов
/ 22 апреля 2011

Я пытаюсь сгенерировать матрицу, применяя функцию ко всем комбинациям элементов двух векторов - что-то вроде этого:

A(i,j) = fun(X(i), Y(j));

Лучшее решение, которое я нашел, - это перебрать всеи j, но я знаю, что это плохой стиль в Matlab.Есть предложения?

1 Ответ

2 голосов
/ 22 апреля 2011

Это в основном то, для чего MESHGRID .Он копирует векторы значений в сетки, и затем к этим точкам сетки можно применить функцию.Обычно вы можете воспользоваться матричными и поэлементными операциями с массивами , чтобы избежать использования цикла for для выполнения определенных вычислений в результирующих сетках.Вот пример:

>> X = 1:4;  %# A sample X vector
>> Y = 1:5;  %# A sample Y vector
>> [xMat,yMat] = meshgrid(X,Y);  %# Create 2-D meshes from the vectors X and Y
>> fun = @(x,y) x.^y;   %# A sample function, which raises each element of x to
                        %#   the corresponding element of y power
>> A = fun(xMat,yMat)   %# Apply the function to compute A

A =

           1           2           3           4
           1           4           9          16
           1           8          27          64
           1          16          81         256
           1          32         243        1024

Обратите внимание, что первый вход для MESHGRID (т. Е. X) обрабатывается как проходящий вдоль столбцов, а второй вход (т. Е. Y)рассматривается как бег по рядам.Это обычно желательно, если X и Y представляют декартовы координаты и матрица A будет построена в виде трехмерной поверхности или сетки.Однако вы также можете использовать функцию NDGRID , если хотите, чтобы это поведение было «перевернуто».Вот тот же пример с NDGRID :

>> [xMat,yMat] = ndgrid(X,Y);
>> A = fun(xMat,yMat)

A =

           1           1           1           1           1
           2           4           8          16          32
           3           9          27          81         243
           4          16          64         256        1024

Обратите внимание, что A теперь является матрицей 4 на 5 вместо матрицы 5 на 4.

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