Ну, можно ожидать, что каждая функция, даже анонимная функция , будет иметь некоторое количество дополнительных издержек, связанных с ее вызовом, что делает их немного медленнее, чем их аналоги из однострочных выражений в вашем примере. Однако в этом случае может быть лишним из-за того, что функции с именем eq
уже существуют в изобилии в MATLAB, так как eq
является именем метода перегруженного ==
оператор . Используя команду WHICH примерно так:
>> which eq -all
Покажет вам, что eq
сильно перегружен перегружен, причем один существует для каждого из основных типов данных и большинства объектов.
Я бы попробовал использовать другое имя для вашего дескриптора анонимной функции, просто чтобы посмотреть, может ли отправка быть фактором, хотя я сомневаюсь, что это основано на порядке приоритета функции (т.е. переменные всегда имеют приоритет). Ваше лучшее решение с точки зрения производительности может заключаться в том, чтобы избежать дополнительных затрат на вызов функции, выполнив что-то вроде того, что DavW предлагает .
Я хотел бы сделать еще одно предложение. Многие математические операции, которые вы выполняете, можно значительно улучшить, чтобы сделать их более эффективными, в частности, с помощью функции MEAN и оператора двоеточия для преобразования всей матрицы в столбец вектор:
result = mean(matrix(:)); %# For the arithmetic mean
result = prod(matrix(:))^(1/numel(matrix)); %# For the geometric mean
result = 1/mean(1./matrix(:)); %# For the harmonic mean
Обратите внимание, что я не использовал имя mean
для моей переменной, поскольку оно уже используется для встроенной функции , и вы определенно не хотите тень это.