ทำงานกับ matrix ช้า ทำไงดี [matlab]


น่าจะเป็นที่ code แล้วล่ะครับ โดยเฉพาะเรื่อง matrix หลักๆ คือให้สร้าง matrix ที่มีขนาดเท่าที่ให้จะใช้งานขึ้นมาแล้วค่อยใส่ค่าเข้าไป ไม่ใช่ค่อยๆเพิ่มขนาดทีละ row หรือทีละ column ถ้าไม่เข้าใจลองดูตัวอย่างข้างล่างครับ ( code สดครับ ไม่ได้ run )

เช่น ถ้าเราต้องการเก็บค่าที่ได้จากการคำนวนอะไรสักอย่างลง matrix ก็จะเขียนได้แบบนี้
a=[4;2;3;4;5;6]
b=[5;7;2;3;4;5;6;8;9]
ถ้าเราต้องการผลต่างระหว่าง element ของ a และ b ทุกตัวเราจะเขียน code ได้แบบนี้

tic
row_index=1;
for i=1:6 %loop บน a
for j=1:9 %loop บน b
output(row_index,:) = a(i)-b(j);
row_index = row_index+1;
end
end
toc

จาก code จะทำให้มีการขยายขนาดของ matrix output ทุกครั้งที่มีการ insert ค่าลงไปซึ่งตรงการขยายขนาด matrix นี่แหละที่ทำให้เสียเวลาเพราะเข้าใจว่า matlab ต้องจัดการ memory สำหรับ matrix output ใหม่ทุกครั้ง ดังนั้นลองเขียนแบบนี้ดู

tic
output=zeros(6*9,3); %สร้าง matrix ขนาด 6*9 row 3 column
row_index=1;
for i=1:6 %loop บน a
for j=1:9 %loop บน b
output(row_index,:) =[i j a(i)-b(j)];
row_index = row_index+1;
end
end
toc

เมื่อเอาไป run ก็เร็วขึ้นกว่าเดิมมาก เพราะ matlab ไม่ต้องทำการขยาย matrix ใหม่ทุกครั้งที่ insert ค่า เนื่องจากเราประกาศ matrix เท่าที่เราต้องการ จากคำสั่ง
output=zeros(6*9,3);

เพิ่มเติมครับ

เราสามารถ save ค่าตัวแปรลงไฟล์ได้นะครับ คราวหน้าก็จะได้ load มาใช้โดยไม่ต้องคำนวนใหม่ด้วยคำสั่ง

save output;

load ‘output.mat’

ลองดูครับ

 

ติดป้ายกำกับ:

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: