Быстрый массив как аргумент, передаваемый в MATLAB

У меня есть матрица I, и я хочу накапливать в массиве A для каждого значения в I интервал, соответствующий этим значениям в I, позволяет называть их i и j.

function acc(i,j)
  global A
  A(i:j) = A(i:j)+1;
end

Однако передача и возврат массивов занимают слишком много времени, потому что я выполняю функцию много раз, а это не так просто, как в этом примере.

Есть ли способ ускорить это? Как я могу передать эти значения без global?


person adn    schedule 25.11.2010    source источник
comment
Возможный дубликат stackoverflow.com/q/1258761/426834   -  person zellus    schedule 25.11.2010
comment
Если мы предложим улучшения к вашему простому примеру, разве вы не разместите еще раз, чтобы объяснить, почему они неадекватны для того, что вы на самом деле пытаетесь сделать? Как вы можете рассчитывать на реальную помощь в решении вашей реальной проблемы, если вы пытаетесь защитить нас от нее?   -  person High Performance Mark    schedule 25.11.2010
comment
Взгляните на этот ответ stackoverflow.com/questions/1258761/ для записи acc как вложенной функции. @zellus: Согласен - все ответы уже даны.   -  person Jonas    schedule 25.11.2010
comment
@Jonas: спасибо вложенная функция решила мою проблему .. она ускорила алгоритм   -  person adn    schedule 26.11.2010


Ответы (1)


Ссылка в комментариях предлагает использовать вложенную функцию в качестве решения. Если функция, которую вы используете, используется в нескольких разных местах, возможно, вы не захотите размещать ее в каждом месте. В этом случае я бы попытался изменить функцию на месте.

http://blogs.mathworks.com/loren/2007/03/22/in-place-operations-on-data/

function A = acc(A,i,j)
  A(i:j) = A(i:j)+1;
end

Это не должно делать копию, если вы соответствуете требованиям, изложенным в сообщении блога Лорен.

person Rich C    schedule 29.11.2010