หลังจากที่เริ่มเขียนรายงาน มีผลการทดสอบหลายตัวที่ต้องการนำเสนอในรูปของกราฟ ซึ่งข้อมูลที่ได้จากต้นทางเป็นผลลัพธ์ของโปรแกรมที่ผมทดสอบนั้นเอง แต่ในแต่ละการทดสอบจะวัดผลกันที่เวลาที่ใช้สำหรับประมวลผลของแต่ละกระบวนการ การจะให้ทดสอบแค่ครั้งเดียวอาจได้ผลที่ไม่แม่นยำและเที่ยงตรงจึงมักใช้วิธีการวัดหาค่าเฉลี่ยของผลลัพธ์ที่ได้ แต่มันจะยุ่งยากมากขึ้นเมื่อมันมีหลายการทดสอบ และในแต่ละกระบวนการมีผลลัพธ์ที่สนใจหลายค่า การใช้เขียนโปรแกรมเข้าไปอ่านค่าที่สนใจเพื่อมาหาค่าเฉลี่ยแล้วพลอทกราฟให้เสร็จในโปรแกรมเดียว ช่วยทุ่นแรงได้เยอะ ไม่อย่างนั้นต้องมาใช้ OO หรือ Ms excel เพื่อหาค่าประมาณแล้วมาพลอทกราฟ ซึ่งต้องออกแรงมาก(เคยโง่ทำมาแล้ว :( ) ยิ่งข้อมูลหลายชุดแต่ละชุดมีผลลัพธ์มากกว่าร้อยที่ต้องหาค่าเฉลี่ยคงไม่ดีเอามากๆ โปรแกรมจัดการข้อมูลสักตัวคงช่วยจัดการปัญหาเปล่านี้ได้เยอะทีเดียว
ช่วงนี้สนใจ Python เป็นพิเศษ เลยคิดว่าน่าจะใช้ Python ช่วยในการจัดการกับข้อมูลหาค่าเฉลี่ย และลองพลอทกราฟดู หาข้อมูลไปเจอจังๆ กับ พลอทแบบ advance ด้วย matplotlib ที่เขียนขึ้นโดยคุณโบว์ เลยลองปรับใช้ดูก็ช่วยได้มากทีเดียว
อีกหนึ่งตัวอย่างครับ อันนี้ต้องเพิ่ม pylab.subplots_adjust( bottom=0.2) เพื่อให้ยืดชื่อการแสดงผลค่าของแกน x ลงไปด่านล่างอีก ถ้าไม่เพิ่มจะมีผลดังรูปด้านล่าง ชื่อแกน x จะหายไปด้วย
ช่วงนี้สนใจ Python เป็นพิเศษ เลยคิดว่าน่าจะใช้ Python ช่วยในการจัดการกับข้อมูลหาค่าเฉลี่ย และลองพลอทกราฟดู หาข้อมูลไปเจอจังๆ กับ พลอทแบบ advance ด้วย matplotlib ที่เขียนขึ้นโดยคุณโบว์ เลยลองปรับใช้ดูก็ช่วยได้มากทีเดียว
นี่เป็นตัวอย่างการเขียนกราฟเท่านั้นที่จริงแล้วข้อมูลที่เขียนไว้เป็น list นั้นเป็นการคำนวณมา แต่เพื่อให้สามารถทดสอบรันสคริปท์ได้เลยกำหนดค่าตัวแปรไว้เลยดีกว่า mathplotlib สามารถปรับแต่งอะไรได้มากพอสมควร ลักษณะคล้ายกับการเขียนกราฟใน MATHLAB มาก (ผมเคยไม่ใช้อย่างจริงจังนะครับ แต่เคยใช้ Octave) ใครที่ต้องเขียนโปรแกรมจำลองอะไรสักอย่าง หรือใช้พวก MATHLAB อยู่ หากต้องการเปลี่ยนมาใช้ของฟรี ผมว่าเป็นตัวเลือกที่น่าสนใจไม่น้อยเลยครับ
#!/usr/bin/python
import pylab
maxDisp = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200]
avgMatchTime = [0.17734787000666669, 0.31560221382666653, 0.44407054089666703, 0.59776487069666673, 0.77322498172333276, 0.90212421176666646, 1.0252877463399999, 1.1674104922266662, 1.2369528987466674, 1.5200350616499998, 1.6371858816133336, 1.716757974836665, 1.9127856219233339, 2.0052048588633338, 2.1540187028333326, 2.3004805823833334, 2.6341289766399982, 2.5638312632966653, 2.7569182477666678, 3.0103878139266693]
avgPostTime = [0.072186028033333294, 0.087022158780000025, 0.10114363204333329, 0.11485705034999998, 0.12757525349000001, 0.14015580686333329, 0.16022517377666665, 0.17268059137999994, 0.18301751240666669, 0.19857297047333336, 0.21165682732333327, 0.22189095372000012, 0.23661178623000018, 0.24874171732333333, 0.26206635718999988, 0.27597628613000014, 0.28714034421999984, 0.30001711474000009, 0.31519068086000002, 0.3259409633833335]
avgTotalTime = [0.27067355572666657, 0.42446094033333365, 0.5677416830466665, 0.73548723805333349, 0.92397964601666649, 1.0653083139099992, 1.2085652136666669, 1.3631419190033331, 1.4430662560500005, 1.7417219116266665, 1.8718606984533328, 1.9616584171466684, 2.1724915346400007, 2.2769267055099993, 2.4390897750733327, 2.5994740052300003, 2.9441218139700021, 2.886547701913333, 3.0948427466366679, 3.3589163385466656]
#ploat graph
pylab.plot(maxDisp, avgMatchTime,'-bo',linewidth=2)
pylab.plot(maxDisp, avgPostTime, '-yo',linewidth=2)
pylab.plot(maxDisp, avgTotalTime, '-ro',linewidth=2)
labelProperty = dict(fontweight='bold',fontsize='12')
pylab.xlabel('Maximum amount disparity', labelProperty)
pylab.ylabel('time (s)', labelProperty)
legends = ('Average matching scan line time',
'Average post-processing time',
'Average total time')
pylab.legend(legends,
loc='upper left', shadow=True, fancybox=True)
pylab.xlim(0,210)
pylab.xticks(maxDisp)
pylab.grid(True)
pylab.show()
อีกหนึ่งตัวอย่างครับ อันนี้ต้องเพิ่ม pylab.subplots_adjust( bottom=0.2) เพื่อให้ยืดชื่อการแสดงผลค่าของแกน x ลงไปด่านล่างอีก ถ้าไม่เพิ่มจะมีผลดังรูปด้านล่าง ชื่อแกน x จะหายไปด้วย
ความคิดเห็น
แสดงความคิดเห็น