Tags:

Post ลง python forum แล้วแต่คิดว่ามันน่าจะเป็นหัวข้อการแก้ปัญหาการโปรแกรม ก็เลยขออนุญาต post ลง forum นี้ครั้งนะครับ

ปรกติผมทำงานคำนวณบน matlab แล้วผลที่ได้ก็แสดงออกมาเป็นกราฟได้เลย แต่ว่า "มันไม่สวย" เลยจะพล็อตด้วย matplotlib แต่ว่าตัวอย่างที่เคยเห็นที่พล็อตนั้น เป็นอาร์เรย์ 1 มิติ แต่งานที่ผมใช้คำนวณมันมากกว่า 1 มิติ เลยอยากขอไอเดียหน่อยครับว่าจะทำอย่างไร

ตัวอย่างใน matlab ที่ผมใช้เช่น

freq = [10 20 30 40 50 60];
attenuation = [[0.1 0.2 0.3 0.4 0.5 0.6]; [0.2 0.4 0.6 0.8 1.0 1.2]];
loglog(freq,attenuation);

ผลที่ได้มันก็จะออกมาเป็นกราฟสองเส้นเส้นแรกเป็นของแถวที่ 1 ของตัวแปร attenuation เส้นที่สองเป็นของแถวที่สอง โดยแกน x เป็น freq แกน y เป็น attenuation

ทีนี้พอผมอยากจะพล็อตด้วย python + numpy + matplotlib นี่ผมจะต้องทำอย่างไรบ้างครับ ปรกติถ้าขอมูลไม่เยอะมากผมก็จะพล็อตโดยแยก attenuation ออกเป็น array ย่อย เช่น

from numpy import *
from pylab import *

freq = [10, 20, 30, 40, 50, 60]
attenuation1 = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
attenuation2 = [0.2, 0.4, 0.6, 0.8, 1.0, 1.2]

loglog(freq,attenuation1, freq,attenuation2)
show()

ข้างบนนี้ค่า attenuation มันมีแค่ 2 แถว แต่งานที่ผมคำนวณมันมีประมาณร้อยกว่าค่า ถ้าจะให้แยกก็คงเสียเวลาไม่น้อย ผมมีพื้นฐาน python ไม่ค่อยมากพึ่งจะเริ่มศึกษา คิดว่ามันน่าจะเกี่ยวกับ for loop แต่พยายามมาหลายวันแล้วยังคิดไม่ตก เลยอยากรบกวนผู้รู้ช่วยแนะให้ไอเดียหน่อยครับ

Get latest news from Blognone
By: boonkhao
ContributoriPhoneBlackberryUbuntu
on 26 November 2010 - 21:55 #235623
boonkhao's picture

สุดท้ายก็คิดเองจนได้ 555 เลยจะต้อง share นิดนึง

from numpy import *
from pylab import *
import numpy as np

freq = [10, 20, 30, 40, 50, 60]
attenuation = np.array([[0.1 0.2 0.3 0.4 0.5 0.6], [0.2 0.4 0.6 0.8 1.0 1.2]])

i = range(2) # 2 is number of row

for i in range(2):
loglog(freq,attenuation[i][:])

show()

จบง่าย ๆ แต่กว่าจะคิดได้ 555 ใช้เวลาไปหลายวัน