0

私の回答の 1 つが、やなどcd(path_to_toolboxのツールの 1 つではなく )の使用を提案したことで最近反対票を投じられました。私が受けた激しい批判を考えると、ツールを使用するのには十分な理由があると想像する必要があります。おそらく、特にコードが他のシステムに配布されている場合は、何らかの形でより堅牢であると思われます。pathaddpathrmpathpath

cd次に、 vsのパフォーマンスを計測することに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。実際には高速です。

編集

この投稿のあとがきとして、私は(そしてこの例では)の間違った使用に罪を犯すことを嘆願します。ただし、簡単なスクリプト作成に頻繁に使用される言語では、そのような使用の余地があるはずです。matlab のユーザーの専門知識には段階があり、場合によっては、「高度」でなく、一見ずさんなプログラミング手法が、実際には短期的には有利であると解釈される可能性があることに注意してください (長期的ではないにしても、または、バージョンとディレクトリ構造の管理が問題になる可能性がある場所)。cdaddpath

付録として、SO の投稿へのリンクをいくつか含め、そのアドレス組み込み関数のオーバーライド、シャドウイングなどを使用できますaddpath(私も主張します):cd

オーバーライドされた関数を再表示する方法は?

オーバーライドされた組み込み関数へのハンドルを取得する方法は?

既存の関数を同じ名前の新しい関数でラップする方法

http://www.mathworks.in/matlabcentral/newsreader/view_thread/264354

4

2 に答える 2

3

明らかに、path関数、スクリプト、クラスなどを探すために MATLAB が検索しなければならない場所が増えることになります。path

一方、現在のディレクトリは、検索する必要がある場所の 1 つにすぎません (もちろん、優先順位を尊重します)。

さらに、すべてのファイルを 1 つのフォルダーに入れても問題ない場合を除き、この 2 つを比較するのは公平ではありません。


コーディングスタイルについてのメモ: char-matrix ではなく、文字列の cellarray を使用して保存できnewpathます。

newpath = cell(100,1);
for i=1:100
    newpath{i} = '...';
end
于 2013-08-17T22:52:30.747 に答える