MATLAB : รู้จักการใช้ comma-separated list

โดย แคลร์ เอ็ม. ธอมป์สัน 

เคยสงสัยไหมว่า เจ้าพวก structure หรือ cell-array เนี่ยสามารถทำเป็นเวคเตอร์ (Vectorize) ได้หรือเปล่า? จริงๆแล้ว algorithms บางอันสามารถทำเป็นเวคเตอร์ได้ ถ้าเรารู้จักใช้ comma-separate list

การใช้ comma-separate list ตามหลักการเขียนโปรแกรมของ Matlab ข้างล่างนี้สามารถใช้ในการทำให้คำสั่งพื้นฐานทั่วไปทำงานแบบเวคเตอร์ได้

  • การเรียงลำดับสมาชิกของ cell array ที่มีคุณสมบัติเหมือนกันใน 1 array (โดยใช้ [ ] หรือ cat)
  • เปลี่ยนกลับไปมาระหว่าง cell arrays และ structure arrays หรือ กำหนดค่าสมาชิกหลายตัวให้กับ structure array ในครั้งเดียว (โดยใช้ deal และ  { } )
  • กำหนดดัชนีให้ arrays ขนาด N มิติ โดยใช้ N subscripts โดยไม่ต้องทราบ N ก่อนล่วงหน้า ( ดูตัวอย่างจากคำสั่ง fftshift)  
  • ส่งผ่านค่าตัวแปร (โดยการใช้ร่วมกับ varargin หรือ varargout)

ถ้า algorithm ที่ใช้เป็นหนึ่งในกรณีข้างบน เราสามารถทำงานกับ cell array หรือ structure ทั้งหมดได้ในครั้งเดียว โดยปกติแล้วความเร็วในการทำงานของ M-file ขึ้นอยู่กับจำนวนบรรทัดของโปรแกรมที่ต้อง execute ดังนั้น การใช้ comma-separated list ในโปรแกรมจะทำให้ M-file ทำงานได้เร็วขึ้น

Comma-separated list

การใช้ comma-separated list มีอยู่ใน Matlab มาตั้งแต่ต้น การใช้งานที่ง่ายที่สุด ก็ใช้เป็นตัวแยกสมาชิกที่ต้องการแสดงในรายการ ตัวอย่างเช่น

>> x = 1:10,x,x(2)

x =

     1     2     3     4     5     6     7     8     9    10
x =

     1     2     3     4     5     6     7     8     9    10
ans =

     2 

โดยปกติแล้วสมาชิกเหล่านี้ควรจะต้องแสดงแยกไว้คนละบรรทัด แต่เราสามารถใส่ไว้ในบรรทัดเดียวกันได้โดยการแยกด้วย comma

comma-separated list สามารถใช้ได้ใน 5 สถานการณ์ดังนี้

  • เพื่อรวม statement หลายๆอัน –> a,b,c,d
  • ใช้ใน [ ] สำหรับเรียงสมาชิกในแนวราบ(แถว)   –> [a,b,c,d]
  • ใช้ใน { } เพื่อสร้าง cell array –> {a,b,c,d}
  • ใช้ใน ( ) เพื่อสร้างดัชนีและเป็น function input arguments –> test(a,b)
  • ใช้ใน [ ] สำหรับ function output arguments –> [v,d] = eig(a)

ทั้งหมดนี้ใช้ได้กับทั้ง cell arrays และ structures.

ไวยากรณ์ของ comma-separated list

ไวยากรณ์ของ comma-separated list เป็นไวยากรณ์ที่ขยายมาจากไวยากรณ์ที่ใช้ในการทำดัชนีบ่งชี้ใน cell array หรือ structure และให้ค่าคืนกลับมา ถ้าต้องการบ่งชี้สมาชิกมากกว่า 1 ตัว รายการที่แสดงด้วย comma-separated list จะถูกสร้างขึ้น ตัวอย่างเช่น สมมติว่า

>> str = {‘This’ ‘is’ ‘an’ ‘example’};

ดังนั้น

>> str{4}
ans =
example

และเมื่อใช้ดัชนีบ่งชี้สมาชิกมากกว่า 1 ตัวในแต่ละครั้ง

>> str{1:4}
ans =
This
ans =
is
ans =
an
ans =
example

เราจะได้ comma-separated list ถ้าเราพิมพ์

>> str{1},str{2},str{3},str{4}

 เราสามารถใช้ subscript จำนวนเท่าไรก็ได้ ตัวอย่างเช่น c{:,1} ให้ค่าเป็น comma-separated list ถ้า c มีมากกว่า 1 แถว

comma-separated list จะให้ค่าเป็น structure array เมื่อเราเรียกใช้ field หนึ่งๆ จากหลายๆสมาชิกใน structure ภายในครั้งเดียว ยกตัวอย่างเช่น ถ้า S เป็น structure array ขนาด 5 x 1 ดังนั้น s.name คือ รายการ comma-separated list ของสมาชิก 5 ตัวของ filed name.

แปลจาก : Matlab Tips & Tricks: Exploiting the comma-separated list. Matlab Digest May 2003

ให้ความเห็น

Filed under MATLAB

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Connecting to %s