หากมีแพ็คเกจที่ต้องใช้สำหรับการคำนวณทางวิทยาศาสตร์หรือการคำนวณใดๆ เครดิตจะตกเป็นของฮีโร่ของเรา NumPy!
Python มีประสิทธิภาพอยู่แล้ว เหตุใดจึงสร้างไลบรารี่ NumPy
- NumPy Array เป็นอีกทางเลือกหนึ่งของ Python List
- ต่างจาก Python Arrays ตรงที่อาร์เรย์ NumPy สามารถคำนวณทั้งอาร์เรย์ได้
- มันทำหน้าที่เป็นฐานภาคพื้นดินที่จำเป็นสำหรับแพ็คเกจอื่น ๆ เช่น scikit-learn
- มีฟังก์ชันมากมายใน NumPy พร้อมการใช้งานที่สะดวกยิ่งขึ้น
- แน่นอนว่ารายการจะไม่สมบูรณ์หากไม่ได้กล่าวถึงว่ามีประสิทธิภาพและรวดเร็ว
นอกจากนี้ NumPy ยังเป็นที่ต้องการเนื่องจากเป็น
- วัตถุอาร์เรย์ N มิติที่ทรงพลัง
- ฟังก์ชั่นที่ซับซ้อน (การออกอากาศ)
- เครื่องมือสำหรับการรวมโค้ด C/C++ และ Fortran
- พีชคณิตเชิงเส้นที่มีประโยชน์ การแปลงฟูเรียร์ และความสามารถด้านตัวเลขสุ่ม
นอกเหนือจากฟังก์ชันการทำงานที่ยอดเยี่ยมอย่างราบรื่นในการคำนวณทางวิทยาศาสตร์แล้ว NumPy ยังจัดการข้อมูลหลายมิติได้อย่างมีประสิทธิภาพ โดยเฉพาะอย่างยิ่งเมื่อพูดถึงข้อมูลทั่วไป สิ่งนี้ผลักดันให้ NumPy รวมเข้ากับฐานข้อมูลต่างๆ
มาเริ่มต้นกับ NumPy กันเถอะ!
เราจะใช้อาร์เรย์หรือเมทริกซ์อย่างกว้างขวาง เพื่อให้การใช้งานง่ายขึ้น มาใช้ NumPy กันดีกว่า เราจำเป็นต้องนำเข้าห้องสมุด:
In[]: import numpy as np # np is just an alias, you don't want to type numpy all the time
1. อาร์เรย์ Numpy สามารถสร้างได้โดยการแปลงจากรายการ:
In[]: my_list = [1,2,3,4] In[]: my_array = np.array(my_list) In[]: my_array Out[]: array([1, 2, 3, 4])
<แข็งแกร่ง>2. คุณสามารถเพิ่มหนึ่งหรือหลายรายการเพื่อสร้างอาร์เรย์ตัวเลขหลายมิติ:
In[]: my_list1 = [1, 2, 3, 4] In[]: my_list2 = [11, 22, 33, 44] In[]: my_list = [my_list1, my_list2] In[]: my_array = np.array(my_list) In[]: my_array Out[]: array([[ 1, 2, 3, 4], [11, 22, 33, 44]])
<แข็งแกร่ง>3. ความยาวของอาร์เรย์ตัวเลข (เมทริกซ์) - [ฟังก์ชันรูปร่าง]:
In[]: my_array.shape Out[]: (2, 4)
<แข็งแกร่ง>4. ประเภทข้อมูลของอาร์เรย์ตัวเลข:
In[]: my_array.dtype Out[]: dtype('int32')
<แข็งแกร่ง>5. การสร้างอาร์เรย์จำนวนศูนย์:
In[]: np.zeros(5) Out[]: array([0., 0., 0., 0., 0.]) # notice these are floating type
<แข็งแกร่ง>6. การสร้างอาร์เรย์จำนวนหนึ่งของ Ones:
In[]: np.ones([5, 5]) Out[]: array([[1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.]])
<แข็งแกร่ง>7. การสร้างเมทริกซ์เอกลักษณ์:
In[]: np.eye(5) Out[]: array([[1., 0., 0., 0., 0.], [0., 1., 0., 0., 0.], [0., 0., 1., 0., 0.], [0., 0., 0., 1., 0.], [0., 0., 0., 0., 1.]])
<แข็งแกร่ง>8. รายการหลามแตกต่างจากอาร์เรย์จำนวนมากอย่างไร
In[]: height = [1.73, 1.68, 1.71] In[]: height Out[]: [1.73, 1.68, 1.71] In[]: weight = [65.4, 59.2, 63.6] In[]: weight Out[]: [65.4, 59.2, 63.6] # Calculating BMI for the present In[]: weight / height ** 2 TypeError: unsupported operand type(s) for ** 'list' and 'int'
สิ่งนี้เกิดขึ้นเพราะ python ไม่มีความคิดเกี่ยวกับวิธีการคำนวณหรือการคำนวณในรายการ
คุณสามารถคำนวณ BMI ของแต่ละคนแยกกันได้ แต่นั่นก็ไร้ประสิทธิภาพอย่างมาก วิธีแก้ปัญหาที่หรูหราคือการใช้ numpy('num'-eric'py'-thon) .
In[]: np_height = np.array(height) In[]: np_height Out[]: array([1.73, 1.68, 1.71]) In[]: np_weight = np.array(weight) In[]: np_weight Out[]: array([65.4, 59.2, 63.6]) In[]: BMI = np_height / np_weight ** 2 In[]: BMI Out[]: array([21.85171573, 20.97505669, 21.75028214])
ข้อพิสูจน์อีกประการหนึ่งที่แสดงว่ารายการหลามแตกต่างจากอาร์เรย์ numpy คือเกี่ยวกับวิธีการดำเนินการทางคณิตศาสตร์ระหว่างตัวมันเอง
# Python List In[]: python_list = [1, 2, 3] In[]: python_list + python_list Out[]: [1, 2, 3, 1, 2, 3] #appends # Numpy Array In[]: numpy_array = np.array([1, 2, 3]) In[]: numpy_array + numpy_array Out[]: array([2, 4, 6]) #performs addition
<แข็งแกร่ง>9. การตั้งค่าย่อย Numpy:
# Let us recall the BMI we calculated above In[]: BMI Out[]: array([21.85171573, 20.97505669, 21.75028214]) In[]: BMI[1] Out[]: 20.97505668934241 In[]: BMI > 21.8 Out[]: array([ True, False, False]) In[]: BMI[BMI > 21.8] Out[]: array([21.85171573])
ปล.! นี่คือวิธีสร้างอาร์เรย์ numpy(ที่ใช้กันทั่วไป)
Syntax: np.arange([start], [stop], [step_size]) # return evenly spaced values within a given interval In[]: np.arange(5) Out[]: array([0, 1, 2, 3, 4]) In[]: np.arange(5, 50, 2) Out[]: array([ 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49])
10. การจัดทำดัชนีอาร์เรย์ Numpy
In[]: arr = np.arange(0, 11) In[]: arr Out[]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) In[]: arr[8] Out[]: 8 # How to fetch values from Nth location to Mth location? # This is technically called SLICING if you assign to other variable In[]: arr[1:5] Out[]: array([1, 2, 3, 4]) # Lets make first 5 range values equate to 500 In[]: arr[0:5] = 500 In[]: arr Out[]: array([500, 500, 500, 500, 500, 5, 6, 7, 8, 9, 10]) # Slicing In[]: sliced_array = arr[0:6] In[]: sliced_array Out[]: array([500, 500, 500, 500, 500, 5]) # See the magic here In[]: sliced_array[5] = 600 In[]: sliced_array Out[]: array([500, 500, 500, 500, 500, 600]) In[]: arr Out[]: array([500, 500, 500, 500, 500, 600, 6, 7, 8, 9, 10]) # Wait... WHAT?! But we assigned the sliced values to new numpy array. Why is arr[5] showing 600?
ดังนั้นสไลซ์จึงไม่แยกอาร์เรย์ มันเป็น สำเนา ของอาร์เรย์ดั้งเดิม การเปลี่ยนแปลงใดๆ ในการแบ่งส่วน สะท้อนถึงอาร์เรย์ตัวเลขดั้งเดิม ซึ่งดำเนินการโดย numpy เพื่อลบการใช้งาน หน่วยความจำที่ไม่จำเป็น
แล้วเราจะคัดลอกอาร์เรย์ numpy ไปยังอาร์เรย์อื่นอย่างชัดเจนได้อย่างไร
In[]: arr_copy = arr.copy() In[]: arr[5] = 5 In[]: arr Out[]: array([500, 500, 500, 500, 500, 5, 6, 7, 8, 9, 10]) In[]: arr_copy Out[]: array([500, 500, 500, 500, 500, 600, 6, 7, 8, 9, 10]) # Voila! It did not change this time!
11. การสร้างเมทริกซ์ N x M
# arange creates serial values from 0 to 49 # reshape is used to shape the matrix. # Reshape works like - reshape(rows, columns) In[]: arr = np.arange(50).reshape(10,5) In[]: arr Out[]: array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20, 21, 22, 23, 24], [25, 26, 27, 28, 29], [30, 31, 32, 33, 34], [35, 36, 37, 38, 39], [40, 41, 42, 43, 44], [45, 46, 47, 48, 49]]) # Array Transposition In[]: arr.T Out[]: array([[ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45], [ 1, 6, 11, 16, 21, 26, 31, 36, 41, 46], [ 2, 7, 12, 17, 22, 27, 32, 37, 42, 47], [ 3, 8, 13, 18, 23, 28, 33, 38, 43, 48], [ 4, 9, 14, 19, 24, 29, 34, 39, 44, 49]])
ให้เราเก็บมันไว้จนถึงตอนนี้ นี่เป็นการแนะนำสั้นๆ เกี่ยวกับ Numpy ติดตามฉันเพื่อรับการอัปเดตเป็นประจำเกี่ยวกับบทช่วยสอนประเภทนี้
หากคุณสนุกกับการอ่านบทความนี้ โปรดกดถูกใจบทความนี้
เพิ่มฉันที่ LinkedIn, Twitter และ Github