6. อาเรย์ 1-3 มิติ (ยกเว้น cell array)

ในหัวข้อนี้เราจะเรียนเฉพาะอาเรย์ของตัวเลข และอาเรย์ของตัวอักษรเท่านั้น ส่วน cell อาเรย์นั้นจะเรียนในหลักสูตรพื้นฐาน 2 ส่วนหลักสูตรปัจจุบันที่ผู้อ่านกำลังศึกษาอยู่นี้คือ หลักสูตรพื้นฐาน 1

6.1 อาเรย์ คือ อะไร

อาเรย์ คือ ชุดของข้อมูลประเภทเดียวกัน ซึ่งหมายความว่ามันสามารถเก็บค่าเอาไว้ได้หลายค่าในตัวแปรตัวเดียว แตกต่างจากตัวแปรทั่วไปที่เราเรียนมาก่อนหน้านี้ เพราะถ้าสังเกตุให้ดี เราจะเห็นว่าตัวแปรทั่วไปนั้น สามารถเก็บค่าได้ 1 ค่าเท่านั้น

เมื่ออาเรย์สามารถเก็บค่าได้หลายค่า ดังนั้นโครงสร้างของมันจึงซับซ้อนกว่าตัวแปรทั่วไป ซึ่งความซับซ้อนของอาเรย์นั้นจะถูกแบ่งออกตามมิติ ของอาเรย์นั้นๆ โดยอาเรย์ 1-3 มิติ มีโครงสร้างดังนี้

อาเรย์ 1 มิติ หรือเรียกอีกชื่อว่า Vector



รูปนี้หมายความว่า ตัวแปรอารย์นี้ชื่อว่า A มีสมาชิกทั้งหมด 4 ตัว ตัวที่ 1 คือ 5 และตัวที่ 4 คือ 17 เมื่อเราต้องการดึงค่า หรือกำหนดค่า เข้าไปในอาเรย์ เราจะเรียกกระบวนการนี้ว่า “การเข้าถึงข้อมูลในอาเรย์” ซึ่งสามารถทำได้ง่ายๆ โดยการพิมพ์ชื่อตัวแปรอาเรย์ต่อท้ายด้วยวงเล็บ และตำแหน่งของข้อมูลที่ต้องการเข้าถึง เช่น
>> disp(A(2))
หมายความว่าให้แสดงค่าของอาเรย์ A ตำแหน่งที่ 2 ซึ่งผลลัพธ์ที่ได้คือ 2.5
>> A(3) = A(3)+1
หมายความว่าให้ตำแหน่งที่ 3 ในอาเรย์ A เก็บค่า 9+1 ซึ่งมีค่าเท่ากับ 10
>> A(3) = A(3+1)
หมายความว่าให้ตำแหน่งที่ 3 ในอาเรย์ A เก็บค่า 17

อาเรย์ 2 มิติ หรือ เรียกอีกชื่อว่า Matrix



ในรูปนี้หมายความว่า อาเรย์ 2 มิตินี้มีชื่อว่า A และการเข้าถึงข้อมูลในอาเรย์ ทำได้เช่นเดียวกับอาเรย์ 1 มิติ นั่นก็คือ วงเล็บ และตามด้วยตำแหน่ง แต่เนื้องจากอาเรย์ 2 มิติ มีทั้งแถว และคอลัมภ์ ดังนั้นเวลาเข้าถึงข้อมูล จึงจำเป็นต้องระบุตำแหน่งแถว และคอลัมภ์ด้วย ซึ่งโดยปกติแล้วจะใช้ตัว m แทนแถว และ n แทนคอลัมภ์ เช่น

>> disp(A(2,1))

ผลลัพธ์ที่ได้ก็คือ 1

>> A(2,1) = A(1,1)+2

หมายความว่าให้เก็บค่า 2+2 ซึ่งมีค่าเท่ากับ 4 ไปไว้ในตำแหน่งแถวที่ 2 คอลัมภ์ที่ 1 ในอาเรย์ A

>> A(2,1+2) = A(1,1+2)

หมายความว่า ให้เก็บค่า 4 ไว้ในอาเรย์ A แถวที่ 2 คอลัมภ์ที่ 3

อาเรย์ 3 มิติ


อาเรย์ประเภทนี้ มีลักษณะโครงสร้างเหมือนเอาอาเรย์ 2 มิติมาวางซ้อนกัน ทำให้อาเรย์มีหลายชั้น ซึ่งแต่ละชั้นเรียกว่า “เลเยอร์” โดยปกติแล้วจะพบได้ในข้อมูลของรูปภาพ แต่หากเป็นการเขียนโปรแกรมตามปกติ ผมแนะนำว่าให้หลีกเลี่ยงการใช้งานประเภทนี้ถ้าทำได้ เพราะในการเขียนโปรแกรมจริงๆ นั้น เราต้องจำเอาไว้ด้วยว่า แต่ละตำแหน่งของอาเรย์ เราเก็บข้อมูลอะไรเอาไว้ เช่น ถ้าเรากำหนดให้อาเรย์ A เป็นตัวแปรที่เอาไว้เก็บค่าบริการของลูกหาบ ที่ให้บริการหาบของขึ้นภูกระดึง โดยคอลัมภ์ที่ 1, 2, 3 แทนระยะทาง 1, 2, 3 กิโลเมตร ส่วนแถวที่ 1, 2, 3 แทนน้ำหนักของ 1, 2, 3 กิโลกรัม และเลเยอร์ แทนจำนวนชิ้น โดยเลเยอร์ที่ 1, 2, 3 แทนจำนวนสิ่งของ 1, 2, 3 ชิ้น ตามลำดับ ดังนั้น หากเราต้องการจ้างลูกหาบ หาบสิ่งของที่มีน้ำหนัก 2 กิโลกรัม จำนวน 2 ชิ้น เป็นระยะทาง 3 กิโลเมตร เราก็ต้องดูราคาค่าบริการที่ A(2,3,2) เท่านั้น

ดังนั้นจะเห็นว่า หากเราเลือกใช้อาเรย์ที่มีโครงสร้างซับซ้อน เราซึ่งเป็นผู้เขียนก็ต้องจำโครงสร้างและความหมายของแต่ละตำแหน่งให้ได้ด้วย ดังนั้นผมจึงแนะนำว่า ถ้าไม่จำเป็นจริงๆ ก็ใช้แค่อาเรย์ 2 มิติก็พอแล้ว และไม่ต้องไปคิดถึงอาเรย์ 4 มิติ 5 มิติ หรือมากกว่านั้น ถึงแม้ในทางทฤษฎีเราจะสามารถสร้างอาเรย์พวกนี้ขึ้นมาใช้งานได้จริง แต่ในทางปฎิบัตินั้นมันจะทำให้เราสับสนมาก

ดังนั้นหากเราจำเป็นต้องใช้อาเรย์ 4 มิติจริงๆ ให้เปลี่ยนไปใช้ cell อาเรย์จะดีกว่า ตัวอย่างเช่น ถ้าเราต้องการเก็บรูปภาพหลายๆ รูปเอาไว้ในตัวแปรเดียวกัน แน่นอนว่าตัวแปรนั้นจะต้องเป็นอาเรย์ และเนื่องจากข้อมูลของรูปภาพนั้น ปกติจะเป็นอาเรย์ 3 มิติอยู่แล้ว เราก็ต้องใช้มิติที่ 4 เพื่อแบ่งรูปภาพที่ 1 ถึง n ซึ่งจริงๆ แล้วเราก็สามารถทำได้ แต่ผมแนะนำว่าเอาแต่ละรูปไปเก็บไว้ใน cell อาเรย์จะง่ายกว่า เพราะอาเรย์ปกตินั้น มีเงื่อนไขที่สำคัญ ดังต่อไปนี้

เงื่อนไขสำคัญของอาเรย์ทุกประเภท

1. ข้อมูลในอาเรย์จะต้องเป็นประเภทเดียวกัน เช่น ถ้าเป็นตัวเลข ก็ต้องเป็นตัวเลขทั้งหมด ถ้าเป็นตัวอักษร ก็ต้องเป็นตัวอักษรทั้งหมด
2. จำนวนคอลัมภ์ของทุกแถวต้องเท่ากันเสมอ
3. จำนวนแถว ของทุกคอลัมภ์ ต้องเท่ากันเสมอ
4. จำนวนแถว และคอลัมภ์ของทุกเลเยอร์ ต้องเท่ากันเสมอ

ดังนั้นหากเราจะใช้อาเรย์ 4 มิติเก็บรูปภาพ รูปภาพเหล่านั้นต้องมีขนาดเท่ากัน จึงจะสามารถเก็บเอาไว้ด้วยกันได้ แต่หากเราใช้ cell อาเรย์ เงื่อนไขต่างๆ เหล่านี้จะหายไปทั้งหมด


6.2 การสร้างอาเรย์

ผมแบ่งการสร้างอาเรย์ออกเป็น 3 วิธีด้วยกัน คือ

1. สร้างอาเรย์ โดยการป้อนข้อมูลเองทั้งหมด

>> A = [1, 2, 3, 4];

ตัวอย่างนี้คือการสร้างอาเรย์ 1 มิติ ซึ่งหากเราไม่ต้องการเขียน comma (,) เราสามารถเขียนโดยเว้นช่องว่างเอาไว้ก็ได้ ซึ่งจะให้ความหมายเหมือนกันกับการใช้ comma

>> A = [1  2;3  4];

ตัวอย่างนี้คือการสร้างอาเรย์ 2 มิติ ซึ่งเราแบ่งแต่ละบรรทัดโดยใช้ semi-colon (;)

>> A(:, :, 1) = [1  2;3  4];
>> A(:, :, 2) = [5  6;7  8];

ตัวอย่างนี้คือการสร้างอาเรย์ 3 มิติ ซึ่งเราต้องสร้างขึ้นมาทีละเลเยอร์
แต่การสร้างอาเรย์แบบป้อนข้อมูลเองทั้งหมด มันก็ค่อนข้างเสียเวลาหากเราต้องสร้างอาเรย์ขนาดใหญ่ ดังนั้นจึงเป็นที่มาของวิธีที่ 2

2. สร้างอาเรย์ โดยใช้ตัวช่วย

เราสามารถใช้เครื่องหมาย colon ( : ) เพื่อช่วงสร้างอาเรย์ได้ เช่น
>> A = 1:40;
หมายความว่า A เป็นอาเรย์ 1 มิติ มีค่าเป็น 1,2,3,4,…,40 (เพิ่มทีละ 1)
>> B = 1:2:40;
หมายความว่า B เป็นอาเรย์ 1 มิติ มีค่าเป็น 1,3,5,7,…,39 (เพิ่มทีละ 2)
ส่วนการสร้างอาเรย์ 2 มิติ และ 3 มิตินั้น เราจะใช้การรวมอาเรย์ ซึ่งจะกล่าวในหัวข้อถัดไป

3. สร้างอาเรย์ โดยใช้คำสั่ง

คำสั่งสร้างอาเรย์นั้นมีอยู่หลายคำสั่ง แต่ที่ผมได้ใช้บ่อยๆ มีดังนี้

- rand(m,n)


- randi([x,y],m,n)


- zeros(m,n)


- k*ones(m,n)


จริงๆ แล้วคำสั่ง ones ใช้สร้างแมททริกซ์ที่มีแต่เลข 1 ซึ่งถ้าเราอยากได้แมททริกซ์ค่าอื่นๆ เราก็แค่เอา k ซึ่งเป็นค่าคงที่ใดๆ เข้าไปคูณเท่านั้นเอง

6.3 การรวมอาเรย์

การรวมอาเรย์นั้นมี 2 แบบคือ

1. การรวมแบบต่อด้านข้าง การรวมแบบนี้มีเงื่อนไขว่าอาเรย์ที่นำมารวมกัน จะต้องมีจำนวนแถวเท่ากัน

2. การรวมแบบต่อด้านล่าง การรวมแบบนี้มีเงื่อนไขว่า อาเรย์ที่นำมารวมกัน จะต้องมีจำนวนคอลัมภ์เท่ากัน

ตัวอย่างเช่น


ในตัวอย่างนี้ A คือการสร้างอาเรย์ 1 มิติ แบบใช้ตัวช่วยสร้าง ส่วน B คือการสร้างอาเรย์ 2 มิติที่ใช้คำสั่ง ส่วน C คือการรวมอาเรย์แบบที่ 2 โดยเอา A มาต่อด้านล่าง A ส่วน D คือการรวม C กับ B โดยเอา B มาต่อด้านซ้ายของ C

การรวมอาเรย์นั้นจะเห็นว่าต้องเป็นไปตามเงื่อนไข 2 ข้อนั้นเสมอ ถึงจะสามารถรวมกันได้ และใช้เครื่องหมาย [  ] ในการรวมอาเรย์เข้าด้วยกัน ส่วนวิธีการรวมกันนั้นเหมือนกับการสร้างอาเรย์แบบป้อนข้อมูลเอง คือ หากรวมแบบต่อด้านข้าง จะใช้ comma หรือ ช่องว่าง เพื่อแบ่งแยกตัวแปร ส่วนการรวมกันแบบต่อด้านล่าง หรือ ด้านบน จะใช้ semi-colon เพื่อแบ่งแยกตัวแปร




จบหัวข้อที่ 6

ความเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การแก้สมการ Differential ด้วย MATLAB

การหาค่าเฉลี่ยโดยไม่ต้องเก็บค่า

การเปรียบเทียบข้อมูล