Как векторизовать это для цикла

Как векторизовать приведенный ниже код?

Здесь x_cords и y_cords - это векторы 7894 * 1, а buffImg - это фиктивное изображение с нулями, и я пытаюсь сопоставить шнуры и получить изображение сегмента.

for i = 1:length(x_cords)
   buffImg(y_cords(i),x_cords(i)) = 1;
end

person Gopi    schedule 01.06.2017    source источник


Ответы (1)


В этом случае вам нужно преобразовать ваши индексы с индексами, хранящиеся в x_cords и y_cords, в линейные индексы с помощью sub2ind-функции, а затем вы можете напрямую назначить их следующим образом:

buffImg=zeros(100,100);
x=randperm(100);
y=randperm(100);
buffImg(sub2ind(size(buffImg),x,y))=1;

Просто чтобы показать вам, что вывод такой же, вот как вы можете это проверить:

x=randperm(100);
y=randperm(100);
buffImg=zeros(100,100);
buffImg2=zeros(100,100);
for i = 1:length(x)
   buffImg(x(i),y(i)) = 1;
end
buffImg2(sub2ind(size(buffImg),x,y))=1;
all(all(buffImg==buffImg2))
person Max    schedule 01.06.2017
comment
Вывод не такой как ожидалось, размер buffImg 3328*2560 если пригодится, итак всего 8519680 пикселей среди которых 7894 шнура надо сделать 1-х - person Gopi; 02.06.2017
comment
Я попробовал ваш код и мой код, и у него был точно такой же результат. Вы уверены, что не сделали ничего плохого? Я добавил некоторый код, чтобы показать вам эквивалентность вашего вывода и моего. - person Max; 02.06.2017
comment
ой, извините, я понял, вы использовали x_cords, y_cords вместо y_cords, x_cords. - person Gopi; 02.06.2017
comment
Спасибо, это действительно полезно - person Gopi; 02.06.2017
comment
Да, я сделал это наоборот, потому что это более распространенный порядок. Пожалуйста. - person Max; 02.06.2017