Я хочу сделать условное построение вертикальных линий, которые меняют цвет на основе значения целочисленного вектора. Эти значения являются целыми числами от 0 до 4.Matlab: Можно ли векторизовать условное построение в цикле?
В настоящее время я использую цикл, чтобы пройти через таблицы для построения линий. Это работает, но для БОЛЬШИХ объемов данных требуется время, и мне интересно, можно ли его векторизовать.
Прилагается усеченная версия скрипта для циклического прохождения через вектор данных (образец), который просто проходит через вектор и отображает вертикальную линию, основанную на значении целого числа.
Я также приложу простую переменную, созданную мной под названием «ОБРАЗЕЦ» ниже, чтобы вставить ее в рабочее пространство.
for i=1:size(sample,1)
if sample(i)==1
line([i i] ,[0 10], 'Marker','.','LineStyle','-','Color','r');
elseif sample(i)==2
line([i i] ,[0 10], 'Marker','.','LineStyle','-','Color','b');
elseif sample(i)==3
line([i i] ,[0 10], 'Marker','.','LineStyle','-','Color',[1 .5 0]);
elseif sample(i)==4
line([i i] ,[0 10], 'Marker','.','LineStyle','-','Color','g');
end
end
Variable:
sample=[[3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;0;0;0]];
Но это возможно «Vectorize» черчения таким образом без того, чтобы сделать это итерационно в цикле, как я сделал?
Ничего себе! Это определенно более эффективно и в соответствии с тем, что я искал. Используя контрольный тест, который я использовал ранее, для его запуска потребовалось около 3 секунд. Используя те же данные с этим модом, это заняло 0,007036 секунд. Так ~ 400 раз быстрее. :) – pelt