Заменить matlab на цикл для входных аргументов функции - PullRequest
1 голос
/ 07 июля 2010

Вот мой вопрос:

У меня есть матрица A = 1xN и матрица B = 6xN У меня также есть функция F = @ (x, y) ...

Что я хочусделать, это зациклить значения A и B таким образом, чтобы каждый раз входные аргументы для F были: A (1, i) и B (:, i)

Есть ли способчто для всех значений без использования цикла for, чтобы выиграть некоторое время?

Cheers

1 Ответ

1 голос
/ 07 июля 2010

С новыми версиями циклов MATLAB не так дорого, как вы думаете.Если ваша функция F является чем-то относительно простым, которое можно легко векторизовать, то обычно вы можете получить более высокую производительность, чем при использовании цикла for, но если F представляет собой довольно сложную операцию, на самом деле может потребоваться больше работы при попытке обойтииспользуя цикл for.

Не зная, что на самом деле делает F, трудно дать вам конкретный ответ.Однако в дополнение к векторизации ваших операций есть несколько функций, которые можно использовать вместо циклов for в определенных ситуациях.Вот некоторые примеры: ARRAYFUN , CELLFUN , STRUCTFUN и BSXFUN .

В качестве примера того, какчтобы использовать BSXFUN , допустим, что выполняемая вами операция F включает умножение каждого столбца B на значение в соответствующем столбце A.Другими словами, C(:,i) = A(1,i).*B(:,i); для всех i.Вы можете сделать это, используя BSXFUN следующим образом:

C = bsxfun(@times,B,A);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...