Один из моих ответов недавно был отклонен за предложение использовать cd(path_to_toolbox
), а не один из path
инструментов. , например addpath
или rmpath
. Учитывая яростную критику, которую я получил, я должен представить, что есть очень веские причины для использования path
инструментов, по-видимому, они в некотором роде более надежны, особенно когда код распространяется на другие системы.
Затем я решил измерить производительность cd
по сравнению с addpath
и был удивлен, обнаружив следующий результат. Перед каждым испытанием я очищал рабочее пространство и создавал массив строк с чередующимися путями:
clear
clc
p1 = 'c:\MATLAB7\toolbox\symbolic\@sym\';
p2 = matlabroot;
newpath = repmat(' ',100,100);
for ii=1:2:99
newpath(ii,1:length(p1)) = p1;
newpath(ii+1,1:length(p2)) = p2;
end
Затем я запустил либо addpath
, либо cd
следующим образом:
tic
for ii=1:100
addpath(newpath(ii,:))
end
toc
Истекшее время 13,437000 секунд.
tic
for ii=1:100
cd(newpath(ii,:))
end
toc
Истекшее время - 1.078000 секунд.
Любые комментарии относительно того, существуют ли условия, при которых использование cd
может быть оправдано, например, для установки пути к функции (панели инструментов или иным образом), приветствуются. Хотя это может быть сочтено небрежным, у меня есть использовался cd
в течение многих лет, и хотя замедление может быть заметным при повторном использовании, я считаю, что если он не используется в сильно повторяемых частях программы, замедление стоит той простоты, которую оно привносит в кодирование. Примечательно, что addpath
не сложнее в использовании, но теперь у меня есть реальная причина предпочесть cd
: он на самом деле быстрее.
Изменить
В качестве постскриптума к этому сообщению я умоляю mea culpa извращать использование cd
(и в этом примере addpath
). Однако должно быть место для такого использования на языке, который часто используется для быстрого написания сценариев. Следует иметь в виду, что существует градация опыта среди пользователей Matlab, и в некоторых случаях менее "продвинутые" и кажущиеся небрежными методы программирования могут фактически быть истолкованы как выгодные в краткосрочной перспективе (если не в долгосрочной перспективе, или где управление версиями и структурой каталогов может стать проблематичным).
В качестве приложения я включаю несколько ссылок на сообщения в SO и за его пределами, переопределение встроенных функций, затенение и т. Д., Где можно использовать addpath
(и я бы поспорил и cd
):
Как показать отменяемую функцию?
Как получить дескриптор для встроенная функция переопределения?
Как обернуть уже существующую функцию новой функцией с тем же именем
http://www.mathworks.in/matlabcentral/newsreader/view_thread/264354
cd
нужно будет вызывать каждый раз в сценарии (дважды, если вы хотите вернуть пользователя к его последнемуpwd
). В некоторых случаяхcd
-ing может потенциально нарушить работу и привести к неожиданным ошибкам, например, передача функции, которая использует контент изpwd
пользователя, в основную функцию, котораяcd
перемещается вперед и назад. - person horchler   schedule 18.08.2013cd
s в любой обычный код. Естьcopyfile
, если вам нужно скопировать содержимое каталога в другое место. К сожалению, все еще нет реального управления версиями в Matlab. Было бы неплохо, если бы существовал встроенный метод установки и удаления набора инструментов или M-файла. - person horchler   schedule 18.08.2013addpath
состоит в том, что я использовал его вместоcd
в необычной ситуации, когда мне нужно было каким-то образом указать прямо на панель инструментов. Хотя это неприемлемо для общего использования, оно похоже на то, что использовалось в других примерах и ответах, представленных на SO. Я бы пошел в дальнейшие объяснения, но лучше оставить как есть. Спасибо, что не проголосовали против ответа. Я рад поделиться этим форумом с такими мудрыми людьми. - person Buck Thorn   schedule 19.08.2013addpath
илиcd
таким образом в реальном приложении, это было просто концептуальным упражнением, чтобы задать вопрос: когда это использовать изcd
подходящих? Я мог бы, например, открыть файлы из сценария и ожидать, что они будут в местах по умолчанию относительно основного пути. Один из способов разместить сценарий на основном пути без необходимости операций конкатенации строк или передачи имени основного пути - этоcd
в соответствующее место. - person Buck Thorn   schedule 19.08.2013cd
в сценариях, которые могут считаться неприемлемыми в распределенном программном обеспечении, но идеально подходят для быстрых и грязных приложений. Что ж, я приветствую вас, чтобы опубликовать ответ. Например, вы можете начать с указания на эти полезные ссылки, которые Амро любезно предоставил, при соответствующем использованииpath
: stackoverflow.com/questions/2129646/ mathworks.se/help/matlab/matlab_env/ - person Buck Thorn   schedule 19.08.2013cd
было более быстрым вариантом, оно позволяет добавлять только 1 путь за раз, в то время какaddpath
позволяет добавлять все пути одновременно. Если вам нужно добавить много путей,addpath
, вероятно, будет быстрее, в то время как если вы добавляете только один за раз, скорость вряд ли станет проблемой. - person Dennis Jaheruddin   schedule 19.08.2013genpath
для генерации строки пути для папки и всех ее подпапок, которая будет использоваться сaddpath
- person Amro   schedule 19.08.2013