2013-05-13 4 views
0

У меня есть несколько файлов m, которые в основном являются обертками для очень длинных сложных уравнений, которые берут более одной строки в статье журнала. В настоящее время они используют матричные операторы, то есть *, /, ^. Я хотел бы преобразовать их в операторы массива, то есть .*, ./, .^, чтобы я мог векторизовать вычисления, которые я делаю с ними.Существует ли разница в производительности между матричными и матричными операторами?

Вопрос в том, есть ли какая-либо причина, по которой я не мог просто выполнить поиск, заменить и сменить всех операторов? Есть ли проблема с производительностью при умножении скаляров на элементарные операторы?

+1

Если вы просто выполните поиск и замените, как вы можете быть уверены, что некоторые из этих уравнений не * уже * работают на матрицах? – wakjah

+0

Почему бы вам просто не сделать это и посмотреть, дает ли он желаемый результат. Если вы беспокоитесь, это повлияет на производительность (что я очень сомневаюсь), тогда сделайте небольшой тест, используя либо 'tic', и' toc', либо 'timeit' – Dan

+0

. Если ваша цель состоит в векторизации выражений, то укажите минимальный рабочий пример что мы можем проверить, чтобы обеспечить векторное решение. – Oleg

ответ

3

Я бы сказал, что это не вопрос производительности.

Если вы имеете дело с линейной алгебры выражений, то вы определенно не хотите, чтобы просто искать & заменить: пусть A = [1; 2; 3] и B = [4; 5; 6], и у вас есть A'*B, то вы не преобразовать в A'.*B, поскольку размеры не соответствуют элемент-мудрый продукт (это будет ошибка).

В случае скалярного умножения, я думаю, что JIT достаточно умен, чтобы рассмотреть 1*2 и 1.*2 эквивалентны и интерпретировать их одинаково.

+0

Последняя строка была действительно тем, что я искал (и не мог найти). Я не был уверен, что MATLAB обрабатывал два оператора по-разному относительно скаляров с точки зрения накладных расходов. – craigim

Смежные вопросы