Когда вы ищете указатели, 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
Если поиск указателей необходим, ограничьте количество объектов, которые нужно искать, указав начальную точку в дереве объектов. Например, задайте начальную точку как рисунок или оси, содержащие объекты, для которых выполняется поиск.
Другой способ ограничить время, затраченное на поиск объектов, - это ограничить глубину поиска. Для примера, a 'flat'
поиск ограничивает поиск объектами в определенном массиве указателей.
Используйте findobj
и findall
функций для поиска указателей.
Для получения дополнительной информации см. Раздел «Поиск объектов»