เป็นไปได้ที่จะสะกัดแยก หรือแทนที่องค์ประกอบในเมทริกซ์ โดยอ้างถึงอินเด็กของแถวและคอลัมน์ของเมทริกซ์
-->a = [1 2 3; 4 5 6 ] สร้างเมทริกซ์ 2 แถว 3 คอลัมน์
-->b = a(2,2)
b =
5
-->a(2, 2) = 100 แทนที่องค์ประกอบของ a ที่คอลัมน์ที่ 2 แถวที่2 ด้วยจำนวน 100
a =
1 2 3
4 100 6
การดำเนินการที่คล้ายคลึงกันที่ทำต่อซับเมทริกซ์ของเมทริกซ์หนึ่งที่มี ซับเมทริกซ์สามารถแยกแยะโดยจำนวนแถวและคอลัมน์ ที่ซึ่งมีจุดเริ่มต้นและจุดปลาย ให้เราพิจารณาการสร้างเมทริกซ์แรกขนาด 5x8.ดังนี้
-->a=rand(5,8)*100 เป็นการสร้างเมทริกซ์ขนาด 5x8 ที่องค์ ประกอบเป็นตัวเลขที่เกิดจากการสร้างเลขสุ่ม
โดย สุ่มจำนวนเต็ม ระหว่าง 0 และ 100
เนื่องจากองค์ประกอบเป็นจำนวนสุ่ม แต่ละคนที่สร้างเมทริกซ์นี้จะได้ เมทริกซ์ที่แตกต่างกัน ให้เราคิดว่าต้องการแยกซับเมทริกซ์ขนาด 2x4 ออกจากเมทริกซ์ a กำหนดขอบเขตช่วงโดยแถว 3 ถึง 4 คอลัมน์ 2 ถึง 5 จะได้เมทริกซ์เป็น a(3:4, 2:5). ช่วงของแถวและคอลัมน์แทนได้ด้วยคำสั่ง range 3:4 และ 2:5 ตามลำดับ ดังนั้น 3:4 กำหนดช่วง 3,4 ขณะที่ 2:5 กำหนดช่วง 2,3,4,5 อย่างไรก็ตามเมทริกซ์ a ยังคงมีอยู่ไม่ได้รับผลกระทบใด
-->b=a(3:4, 2:5)
คำสั่งนี้สำเนา ซับเมทริกซ์ ไปเป็นเมทริกซ์ 'b'. ซับเมทริกซ์สามารถเขียนทับไปแทนที่ได้ ง่ายเท่าๆกับการสำเนา การทำให้ทุกองค์ประกอบของ ซับเมทริกซ์ระหว่างช่วงบนเท่ากับศูนย์ ให้ใช้คำสั่งดังนี้
-->a(3:4, 2:5)=zeros(2,4)
คำสั่งนี้สร้างเมทริกซ์ 2x4 มีองค์ประกอบเป็น 0 แล้วใส่เป็นซับเมทริกซ์ 'a'
ระหว่างแถว 3:4 และคอลัมน์ 2:5.
ให้สังเกตว่าซับเมทริกซ์ทางด้านซ้ายมือ และเมทริกซ์ทางขวามือ (เป็นเมทริกซ์ศูนย์ ตามตัวอย่างข้างบน) จะต้องมีขนาดเดียวกัน
ขณะที่การใช้ช่วง (range) ในการบ่งถึงแถวและหรือคอลัมน์ ที่ยอมให้มียกออกจากตอนเริ่มแรก (หรือเลิก)ค่าในช่วง ซึ่งเป็นกรณีที่คิดให้เป็น 1 (หรือตัวเลขของแถวหรือคอลัมน์สุดท้าย) เพื่อระบุแถวทั้หงมด (หรือคอลัมน์) เป็นการเพียงพอที่จะใช้เพียงแค่โคลอน (:). โดยวิธีนี้ ซับเมทริกซ์ประกอบด้วยทั้งหมดของแถวและคอลัมน์ 2 และ 3 ของเมทริกซ์ a คำสั่งก็คือ a(:, 2:3). ปกติแล้ว a(:, :) แทนเมทริกซ์ทั้งหมด ซึ่งแน่นอนว่าสามารถแทนได้โดยเพียงการเขียนว่า a ไซแลยใช้สัญลักษณ์พิเศษอ้างถึงจำนวนของแถวสุดท้าย(หรือคอลัมน์) โดยสัญลักษณ์$ สามารถใช้ภายใต้ช่วงตามการระบุ ที่แทนจำนวนของแถวสุดท้าย(หรือ คอลัมน์)
เป็นไปไม่ได้ที่ระบุเฉพาะค่าเริ่มต้นของช่วงเท่านั้น และ ไม่มีค่าปลายหรือในทางที่กลับกัน ทั้งสองค่าระบุหรือ ไม่ระบุค่าทั้งสอง ซับเมทริกซ์ของแถวทั้งหมดของ เมทริกซ์ a และคอลัมน์ 3 ถึง 8 แทนได้ด้วย
-->a(:, 3:$)
ในด้านล่าง เราทำการสะกัดทุกแถวและคอลัมน์จากคอลัมน์ 3 ไปคอลัมน์สุดท้าย นอกจากคอลัมน์หนึ่ง นั่นคือ 7 ให้สังเกตว่า $ คือคอลัมน์สุด และ $-1 คือคอลัมน์สุดท้ายนอกจากคอลัมน์หนึ่ง
-->a(:, 3:$-1)
ให้สังเกตว่า ซับเมทริกซ์ไม่จำเป็นต้องประกอบด้วยแถวที่ติดต่อกัน หรือคอลัมน์ที่ติดต่อกัน ตัวอย่างเช่นเพื่อสะกัดแถวคี่และคอลัมน์คี่จากเมทริกซ์ a, เราคงสามารถใช้คำสั่งต่อไปนี้
-->c = a(1:2:$, 1:2:$)
คำสั่งนี้สำเนาซับเมทริกซ์ของ a ด้วยแถว 1, 3, 5 และ คอลัมน์ 1, 3, 5, 7 อยู่ในเมทริกซ์ b. จำนวนแถวแทนด้วยช่วง 1:2:$ ซึ่งทำให้เห็นได้ว่าเริ่มจาก 1, เพิ่มขึ้นทีละ 2 แต่ลชะครั้งไปจนถึง $, ซึ่งในกรณีนี้คือ 5.
-->c = a(:, $:-1:1)
เราสามารถแม้แต่การกลับลำดับของคอลัมน์(หรือแถว หรือทั้งสองแถวและคอลัมน์) ช่วง $:-1:1 กลับลำดับของคอลัมน์ (แถวไม่มีการเปลี่ยนแปลง) , และเมทริกซ์ที่ปรับเปลี่ยนไปถูกเก็บไว้ใน c
แบบฝึกหัด 4 ซับเมทริกซ์
1. ให้สกัดคอลัมน์สุดท้ายของเมทริก a และให้เก็บไว้ในเมทริกซ์ b
(Ans: b = a(:,$)).
2. ให้สกัดคอลัมน์สุดท้ายแต่เป็นคอลัมน์หนึ่งของเมทริกซ์ a และให้เก็บไว้ในเมทริกซ์ b (Ans: b = a(:,$-1)).
3.ให้แทนที่เมทริกซ์ย่อยระหว่างแถวที่ 3 ถึง 5 และ คอลัมน์ 2 ไปยังคอลัมน์สุดท้าย แต่เป็นคอลัมน์หนึ่งในในเมทริกซ์ a มีขนาด 5x5 ด้วยค่าศูนย์ (Ans: a(3:5,2:$-1) =zeros(3,4). แทนที่ศูนย์(3,4) เราสามารถใช็ศูนย์(:,:) และ ไซแลบจะคำนวณจำนวนที่ต้องการของแถวและคอลัมน์ตัวเอง)
4. Replace the even numbered columns of matrix a having size 3x5 with ones. (Ans: a(:,2:2:$)=ones(:, :)).
5. What is the sub-matrix of a extracted by the following command a(1:3,$-2:$)? (Ans: It extracts the first 3 rows and last 3 columns of matrix a).
6. Assuming a to be a 5x8 matrix, are the following valid commands? If so, what do they do? If not, what is the correct command? 1. A(1:, 5) Incorrect. Should indicate end row number. 2. A(:, 5) Correct 3. a(1:3, $-1:$) Correct 4. a(:$, 3:6) Incorrect. Should indicate start row number.
4. Replace the even numbered columns of matrix a having size 3x5 with ones. (Ans: a(:,2:2:$)=ones(:, :)).
5. What is the sub-matrix of a extracted by the following command a(1:3,$-2:$)? (Ans: It extracts the first 3 rows and last 3 columns of matrix a).
6. Assuming a to be a 5x8 matrix, are the following valid commands? If so, what do they do? If not, what is the correct command? 1. A(1:, 5) Incorrect. Should indicate end row number. 2. A(:, 5) Correct 3. a(1:3, $-1:$) Correct 4. a(:$, 3:6) Incorrect. Should indicate start row number.
ไม่มีความคิดเห็น:
แสดงความคิดเห็น