วิธีทำเวคเตอร์สำหรับลูป

วิธีทำให้โค้ดด้านล่างเป็นเวคเตอร์ได้อย่างไร

ที่นี่ 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