オブジェクトの再検索の回避
ハンドルを検索する場合、MATLAB® はオブジェクト階層を検索して一致するハンドルを検出しなければならず、時間がかかります。後でアクセスが必要となるハンドルを保存しておくのが時間を短縮できる方法です。通常、findobj
や findall
を使用するより、配列インデックス付けの方が高速です。
次のコードは 500 個の line オブジェクトを作成した後、ループ内で findobj
を呼び出しています。
figure ax = axes; for ix=1:500 line(rand(1,5),rand(1,5),'Tag',num2str(ix),'Parent',ax); end drawnow; for ix=1:500 h = findobj(ax,'Tag',num2str(ix)); set(h,'Color',rand(1,3)); end drawnow;
これよりさらに良い方法は、ハンドルを配列に保存し、2 番目の for
ループでこの配列にインデックスを付けることです。
figure ax = axes; h = gobjects(1,500); for ix = 1:500 h(ix) = line(rand(1,5),rand(1,5),'Tag',num2str(ix),'Parent',ax); end drawnow; % Index into handle array for ix=1:500 set(h(ix),'Color',rand(1,3)); end drawnow
検索範囲の制限
ハンドルの検索が必要な場合、オブジェクト ツリー内での開始点を指定して、検索するオブジェクト数を制限します。たとえば、開始点を、検索するオブジェクトを含む Figure または座標軸として指定します。
時間のかかるオブジェクト検索を制限するもう 1 つの方法は、検索の深さを制限することです。たとえば、'flat'
オプションを指定して findobj
を呼び出すと、特定のハンドル配列内のオブジェクトに検索が制限されます。
関数 findobj
と findall
を使用してハンドルを検索します。
詳細は、オブジェクトの検索を参照してください。