ลิสต์ (List) เป็นชนิดข้อมูลที่มีลำดับขององค์ประกอบที่เรียงลำดับไว้ ลิสต์เป็นชนิดข้อมูลที่มีประโยชน์เพราะช่วยให้คุณจัดเก็บค่าที่เกี่ยวข้องหลายค่าในตัวแปรเดียว ด้วยลิสต์ คุณอาจเก็บชื่อรองเท้า 10 คู่ในตัวแปรเดียว หรือเก็บรายการซื้อที่คุณซื้อที่ร้านในตัวแปรเดียว
ในขณะที่ชนิดข้อมูลลิสต์ในตัว (built-in) มีพลังแล้ว สำหรับกรณีใช้งานขั้นสูง คุณอาจพบว่ามันขาดแคลน นั่นคือที่มาของชนิดข้อมูลอาร์เรย์ของ NumPy ไลบรารี NumPy สามารถใช้สร้างอาร์เรย์หลายมิติได้อย่างง่ายดาย
ในคู่มือนี้ เราจะพูดถึงว่า NumPy Arrays คืออะไร ทำไมมันมีประโยชน์ และวิธีทำงานกับมันในโค้ดของคุณ มาเริ่มกันเลย!
NumPy Array คืออะไร?
NumPy Array คือออบเจ็กต์อาร์เรย์ที่ใช้ภายในไลบรารี NumPy ของ Python NumPy ย่อมาจาก Numerical Python เป็นแพ็กเกจที่มักใช้สำหรับคอมพิวติ้งทางวิทยาศาสตร์และคณิตศาสตร์ มันมาพร้อมกับเครื่องมือหลายอย่างที่ช่วยในการวิเคราะห์ข้อมูลและคณิตศาสตร์ขั้นสูง
ใน Python แบบ vanilla (Python โดยไม่มีแพ็กเกจภายนอก) อาร์เรย์มีพลังแต่อาจช้าในการประมวลผล NumPy Arrays ในทางกลับกัน มุ่งเน้นที่จะเร็วกว่าอาร์เรย์ Python แบบดั้งเดิมหลายเท่า
การเพิ่มประสิทธิภาพนี้ทำได้เพราะ NumPy Arrays จัดเก็บค่าในที่เดียวต่อเนื่องในหน่วยความจำ ทำให้ Python เข้าถึงและจัดการลิสต์ได้ง่าย
วิธีประกาศ NumPy Array
เพื่อเริ่มต้น มาตั้งค่า NumPy Array สำหรับบทช่วยสอนนี้ เราจะเก็บค่าสตริงในอาร์เรย์ ค่าสตริงเหล่านี้เป็นลิสต์ของขนมหวานที่เสิร์ฟที่ร้านกาแฟท้องถิ่น เราจะเริ่มด้วยการนำเข้าไลบรารี NumPy:
import numpy as np
บรรทัดโค้ดนี้นำเข้า numpy จาก Python และกำหนดชื่อไลบรารีว่า np หมายความว่าเมื่อเราต้องการทำงานกับอาร์เรย์ เราแค่ต้องเรียก np
ต่อไป เราจะประกาศอาร์เรย์ของเราโดยใช้ interface ของอาร์เรย์:
treats = np.array(["Blueberry Muffin", "Cinnamon Bun", "Jammy Shortbread"]) print(treats)
อาร์เรย์ของเรามีค่าสตริง 4 ค่า เหมือนอาร์เรย์ Python แบบดั้งเดิม เราล้อมรายการทั้งหมดในลิสต์ด้วยวงเล็บเหลี่ยม เพื่อประกาศ NumPy Array เราใช้เมธอด array ที่เป็นส่วนหนึ่งของ np สิ่งนี้สร้างออบเจ็กต์ ndarray ซึ่งเป็นชนิดอาร์เรย์ในตัวของ NumPy
โค้ดของเราคืนค่าสำเนาของอาร์เรย์ต้นฉบับ จัดเก็บเป็น NumPy Array:
['Blueberry Muffin' 'Cinnamon Bun' 'Jammy Shortbread']
แค่นี้ก็พอ: เรามีอาร์เรย์ที่สามารถทำงานได้แล้ว
NumPy Arrays: มิติ (Dimensions)
เมื่อเราพูดถึงมิติใน NumPy เราไม่ได้หมายถึงโลกใหม่ๆ เหมือนในหนัง มิติในอาร์เรย์คือระดับความลึกหนึ่งระดับภายในอาร์เรย์ เมื่อใช้คำว่า dimension หมายถึงอาร์เรย์ซ้อน (nested arrays) ซึ่งเป็นอาร์เรย์ที่มีอาร์เรย์อยู่ภายใน
อาร์เรย์สามารถมีมิติได้ทุกจำนวน อาร์เรย์ส่วนใหญ่ที่คุณจะทำงานจะเป็นอาร์เรย์ 1-D, 2-D, หรือ 3-D ตัว "D" ย่อมาจาก dimension (มิติ)
NumPy 1-D Array
ในตัวอย่างแรก เราสร้างอาร์เรย์ 1-D นี่คืออาร์เรย์ที่มีอาร์เรย์ 0-D (หรือรายการ) เป็นองค์ประกอบ อาร์เรย์ส่วนใหญ่ที่คุณจะทำงานจะเป็น 1-D
มาสร้างอาร์เรย์ที่เก็บราคาขนมหวานที่ร้านกาแฟ:
import numpy as np prices = np.array([1.95, 2.00, 2.05]) print(prices)
โค้ดของเราคืนค่าอาร์เรย์ในหนึ่งมิติ เก็บค่าของเรา: [1.95 2. 2.05]
เพื่อเข้าถึงองค์ประกอบจากอาร์เรย์ 1-D คุณสามารถใช้ไวยากรณ์เดียวกับที่คุณใช้กับลิสต์ Python มาดึงรายการที่สองในลิสต์ของเรา:
print(prices[1])
โค้ดของเราคืนค่ารายการที่มีค่าดัชนี 1 ซึ่งคือ: 2
เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับอาร์เรย์ Python อ่านคู่มือผู้เริ่มต้นเกี่ยวกับอาร์เรย์ Python ของเรา
NumPy 2-D Array
ไม่ใช่ทุกอาร์เรย์ที่เป็น 1-D สมมติว่าเราต้องการเก็บอาร์เรย์ที่มีอาร์เรย์ 2 อาร์เรย์ อาร์เรย์หนึ่งเก็บขนมหวานที่ขายที่ร้านกาแฟ อีกอาร์เรย์เก็บลิสต์กาแฟที่ขายที่ร้าน ร่วมกันเป็นอาร์เรย์ menu items
มาสร้างอาร์เรย์นี้โดยใช้ NumPy:
import numpy as np
menu_items = np.array([
["Blueberry Muffin", "Cinnamon Bun", "Jammy Shortbread"],
["Cappuccino", "Espresso", "Mocha"]
])
print(menu_items)
อาร์เรย์ที่สร้างขึ้นคือ:
[['Blueberry Muffin' 'Cinnamon Bun' 'Jammy Shortbread'] ['Cappuccino' 'Espresso' 'Mocha']]
อาร์เรย์ที่สร้างใหม่มี 2 มิติ อาร์เรย์แรกภายในอาร์เรย์ของเรามีลิสต์ขนมหวาน อาร์เรย์ที่สองมีลิสต์กาแฟ สังเกตว่าทั้งสองอาร์เรย์ถูกล้อมด้วยคู่ของวงเล็บเหลี่ยมซึ่งเชื่อมอาร์เรย์ทั้งสองเข้าด้วยกัน
การดึงรายการจากอาร์เรย์ 2-D ทำงานแตกต่างใน NumPy จากใน Python เล็กน้อย เพื่อเข้าถึงองค์ประกอบจากอาร์เรย์ 2-D คุณต้องแยกหมายเลขดัชนีของค่าที่คุณต้องการดึงจากอาร์เรย์
พิจารณาโค้ดนี้:
print(menu_items[0, 2])
โค้ดของเราคืนค่า: Jammy Shortbread เราได้ดึงรายการที่มีค่าดัชนี 2 ที่จัดเก็บอยู่ภายในอาร์เรย์ที่มีค่าดัชนี 0 ในกรณีนี้ เราได้ดึงรายการสุดท้ายในอาร์เรย์ที่เก็บขนมหวานที่ขายที่ร้านกาแฟ
NumPy 3-D Array
มาเพิ่มมิติอีกหนึ่งมิติ! NumPy Arrays สามารถมีอาร์เรย์ 3-D ได้ นี่คืออาร์เรย์ที่มีอาร์เรย์ 2-D
สมมติว่าเราต้องการจัดเก็บค่าต่อไปนี้:
- อาหารหวานและอาหารไม่หวาน (จับคู่แยกในอาร์เรย์ต่างกัน); และ
- เครื่องดื่มที่มีคาเฟอีนและไม่มีคาเฟอีน (จับคู่แยกในอาร์เรย์ต่างกัน);
ค่าทั้งหมดควรจัดเก็บภายในอาร์เรย์เดียว มิติของอาร์เรย์นี้คือ:
- 1-D: รายการเมนูทั้งหมด
- 2-D: อาหารหวาน และ ไม่หวาน, เครื่องดื่มที่มีคาเฟอีน และ ไม่มีคาเฟอีน
- 3-D: อาหารหวาน, อาหารไม่หวาน, เครื่องดื่มมีคาเฟอีน, เครื่องดื่มไม่มีคาเฟอีน
มาสร้างอาร์เรย์นี้โดยใช้ NumPy วางโค้ดต่อไปนี้ลงในไฟล์ Python:
import numpy as np
menu_items = np.array([
[
["Blueberry Muffin", "Cinnamon Bun", "Jammy Shortbread"],
["Smoked Bacon Roll", "Tuna Melt Panini", "Cheese and Tomato Toastie"]
],
[
["Cappuccino", "Espresso", "Mocha"],
["Apple Juice", "Water", "Orange Juice"]
]
])
print(menu_items)
โค้ดของเราคืนค่า:
[[['Blueberry Muffin' 'Cinnamon Bun' 'Jammy Shortbread'] ['Smoked Bacon Roll' 'Tuna Melt Panini' 'Cheese and Tomato Toastie']] [['Cappuccino' 'Espresso' 'Mocha'] ['Apple Juice' 'Water' 'Orange Juice']]]
เราสร้างอาร์เรย์ 3-D พร้อมข้อมูลทั้งหมดที่เราพูดถึงก่อนหน้านี้ อาร์เรย์นี้เป็นลิสต์ครบครันของรายการเมนูทั้งหมดที่ร้านกาแฟเสิร์ฟ
การเข้าถึงรายการจากอาร์เรย์ 3-D ทำงานคล้ายกับไวยากรณ์ที่ใช้เข้าถึงรายการจากอาร์เรย์ 2-D ความแตกต่างคือคุณต้องระบุหมายเลขดัชนีที่สามเพื่อดึงรายการจากอาร์เรย์ 3-D มาดึง "Mocha" จากอาร์เรย์ของเรา:
print(menu_items[1, 0, 2])
โค้ดของเราคืนค่า: Mocha
1 คือหมายเลขดัชนีของมิติที่ 1 ที่เราต้องการเข้าถึง (1 ตรงกับเครื่องดื่ม); 0 คือหมายเลขดัชนีของมิติที่ 2 (0 ตรงกับเครื่องดื่มที่มีคาเฟอีน); 2 คือหมายเลขดัชนีของมิติที่ 3 (2 ตรงกับ Mocha)
นับมิติในอาร์เรย์
NumPy Arrays อาจดูซับซ้อนเมื่อคุณเริ่มเพิ่มมิติใหม่ เรายังไม่ได้สำรวจอาร์เรย์ที่มีมากกว่า 3 มิติ! โชคดีที่มีทางลัดที่คุณสามารถใช้คำนวณว่าอาร์เรย์มีกี่มิติ
วางโค้ดต่อไปนี้ลงในไฟล์ Python:
import numpy as np
menu_items = np.array([
["Blueberry Muffin", "Cinnamon Bun", "Jammy Shortbread"],
["Cappuccino", "Espresso", "Mocha"]
])
print(menu_items.ndim)
มารันโค้ดของเรา ค่า "2" จะถูกคืนค่า นี่บอกเราว่าอาร์เรย์ของเรามี 2 มิติ ซึ่งเราเห็นได้ว่าจริงจากการวิเคราะห์อาร์เรย์ข้างต้น
สรุป
NumPy Arrays เป็นวิธีที่ยืดหยุ่นในการจัดเก็บค่าที่คล้ายกัน พวกมันเร็วกว่าและมีประสิทธิภาพมากกว่าอาร์เรย์ Python แบบดั้งเดิม คุณสามารถทำงานกับหลายมิติโดยใช้ NumPy Arrays ได้อย่างง่ายดาย ซึ่งทำได้ยากกว่าใน vanilla Python
ตอนนี้คุณพร้อมที่จะเริ่มใช้ NumPy Arrays อย่างนักเขียนโปรแกรมมืออาชีพแล้ว!