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 แต่พยายามมาหลายวันแล้วยังคิดไม่ตก เลยอยากรบกวนผู้รู้ช่วยแนะให้ไอเดียหน่อยครับ
สุดท้ายก็คิดเองจนได้ 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 ใช้เวลาไปหลายวัน