Когда вы ищете указатели, MATLAB® должен искать иерархию объектов, чтобы найти соответствие с указателями, который длителен. Сохранение указателей, к которым необходимо получить доступ позже, является более быстрым подходом. Индексация массива обычно быстрее, чем использование findobj
или findall
.
Этот код создает 500 объектов линии и затем вызывает 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;
Лучший подход должен сохранить указатели в массиве и индексе в массив во втором цикле 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
Если поиск указателей необходим, ограничьте количество объектов, которые будут искаться путем определения отправной точки в дереве объектов. Например, задайте отправную точку как фигуру или оси, содержащие объекты, которые вы ищете.
Другой способ ограничить время, израсходованное, ища объекты, состоит в том, чтобы ограничить глубину поиска. Например, поиск 'flat'
ограничивает поиск объектами в определенном массиве указателя.
Используйте findobj
и функции findall
, чтобы искать указатели.
Для получения дополнительной информации смотрите, Находят Объекты