จงเชื่อคำเตือนของ MATLAB


ผมเองรู้เรื่องตัวแปรที่ไม่ต้องกำหนดขนาดก่อนใช้งานมานานแล้ว ซึ่งเป็นที่รู้กันดีว่าการใช้ตัวแปรแบบนี้มันทำให้โปรแกรมทำงานช้าลง แต่ไม่เคยรู้มาก่อนเลยว่ามันจะช้าขนาดนี้

ผมจำเป็นต้องวาดกราฟของการลู่เข้าของค่าพารามิเตอร์ซึ่งมีประมาณ 2 หมื่นค่า อาจจะสร้างเล่น ๆ ได้ดังนี้

theta = [];

for ii = 1:20000
theta(1:20,ii) = rand(20,1);
end

ลองรันชุดคำสั่งข้างบนดู จะพบว่าลุกไปกินกาแฟหรือเข้าห้องน้ำตัวโปรแกรมก็อาจจะยังทำงานไม่เสร็จ มาลองแก้ไขชุดคำสั่งข้างบน โดยเพิ่มบรรทัดขึ้นอีกหนึ่งบรรทัด (การเพิ่มคำสั่งเข้าไปน่าจะทำให้โปรแกรมทำงานช้าลง) ดังนี้

theta = [];

theta = zeros(20,20000);
for ii = 1:20000
theta(1:20,ii) = rand(20,1);
end

ลองรันชุดคำสั่งที่สองดู ยังไม่ทันกระพริบตาก็เสร็จแล้ว ซึ่งชุดคำส่งแรกใช้เวลาประมาณ 170 วินาที เกือบ ๆ สามนาที ในขณะที่ชุดคำสั่งที่สองใช้เวลาเกือบ 0.1 วินาที ซึ่งต่างกันมากทีเดียว

ก็ไม่แปลก เพราะเวลาไม่ได้กำหนดขนาดของอะเรย์ เวลามีการขยายหรือทำอะไรกับมัน ย่อมน่าจะมีกระบวนการต่าง ๆ พอสมควร (ผมไม่รู้และไม่สนใจ) แต่ที่แปลกคือมันต่างกันขนาดนี้เลยเหรอ ดังนั้นแล้วเวลาใช้งาน MATLAB ก็ควรจะใส่ใจต่อคำเตือนของ IDE ของ MATLAB ด้วย

Advertisements

Leave a Reply

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 / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s