Нет необходимости присваивать каждый результат новой переменной.Например, вы можете написать:
A = [1,2,3,4,5,6]; %input data
A = sort(A); %step one
A = A(1,1) + 10; %step two
Особенно, если A
велико, гораздо эффективнее написать A = sort(A)
, чем B = sort(A)
, потому что тогда sort
может работать в-place , избегая необходимости создавать вторичный массив.То же самое верно для многих других функций.Работа на месте означает, что кэш может использоваться более эффективно, ускоряя операции.Сокращение использования памяти также является плюсом для очень больших массивов, а операции на месте имеют тенденцию избегать фрагментации памяти.
Напротив, такие вещи, как clear B
, имеют тенденцию замедлять работу интерпретатора, поскольку они делают вещи болеесложный для JIT.Кроме того, как видно из документации ,
В системах UNIX® очистка не влияет на объем памяти, выделенный процессу MATLAB.
То есть переменная очищается из памяти, но сама память не возвращается в систему.
В качестве отступления, как сказал @ obchardon в комментарии Ваш код может быть еще более упрощен, если вы поймете, что min
делает то же самое, что и сохраняет только первое значение результата sort
(но гораздо эффективнее).
В качестве примера:Я поместил три операции в ряд, которые могут работать на месте, и использовал timeit
, чтобы рассчитать время выполнения этих двух опций: каждый раз использовать другую переменную и очищать их, когда в них больше нет необходимости.или присвоение одной и той же переменной.
N = 1000;
A = rand(1,N);
disp(timeit(@()method1(A)))
disp(timeit(@()method2(A)))
function D = method1(A)
B = sort(A);
clear A
C = cumsum(B);
clear B
D = cumprod(C);
end
function A = method2(A)
A = sort(A);
A = cumsum(A);
A = cumprod(A);
end
Использование MATLAB Online Я вижу следующие значения:
- разные переменные +
clear
: 5.8806e-05 с - повторное использование той же переменной: 4.4185e-05 с
MATLAB Online - не лучший способ для проведения временных тестов, так как на сервере одновременно происходит много других вещей, но он дает хорошие показания.Я запускал тест несколько раз и большую часть времени видел похожие значения.