Python: เวกเตอร์ เมทริกซ์ และอาร์เรย์ด้วย NumPy

Python Vectors Matrices



ในบทเรียนนี้ เราจะมาดูเคล็ดลับและลูกเล่นเล็กๆ น้อยๆ เพื่อเล่นกับเวกเตอร์ เมทริกซ์ และอาร์เรย์โดยใช้ไลบรารี NumPy ใน Python บทเรียนนี้เป็นจุดเริ่มต้นที่ดีมาก หากคุณกำลังเริ่มต้นใช้งาน Data Science และต้องการภาพรวมทางคณิตศาสตร์เบื้องต้นของส่วนประกอบเหล่านี้ และวิธีที่เราสามารถเล่นกับองค์ประกอบเหล่านี้โดยใช้ NumPy ในโค้ด

ไลบรารี NumPy ช่วยให้เราสามารถดำเนินการต่างๆ ซึ่งต้องทำบนโครงสร้างข้อมูลที่มักใช้ในการเรียนรู้ของเครื่องและวิทยาศาสตร์ข้อมูล เช่น เวกเตอร์ เมทริกซ์ และอาร์เรย์ เราจะแสดงเฉพาะการดำเนินการทั่วไปส่วนใหญ่กับ NumPy ซึ่งใช้ในไปป์ไลน์ Machine Learning จำนวนมาก สุดท้ายนี้ โปรดทราบว่า NumPy เป็นเพียงวิธีการดำเนินการ ดังนั้นการดำเนินการทางคณิตศาสตร์ที่เราแสดงจึงเป็นจุดสนใจหลักของบทเรียนนี้ ไม่ใช่ตัวแพ็คเกจ NumPy มาเริ่มกันเลย.







เวกเตอร์คืออะไร?

จากข้อมูลของ Google เวกเตอร์คือปริมาณที่มีทิศทางและขนาด โดยเฉพาะอย่างยิ่งการกำหนดตำแหน่งของจุดหนึ่งในอวกาศที่สัมพันธ์กับอีกจุดหนึ่ง





เวกเตอร์มีความสำคัญมากในการเรียนรู้ของเครื่อง เนื่องจากไม่เพียงแต่อธิบายขนาด แต่ยังรวมถึงทิศทางของคุณลักษณะด้วย เราสามารถสร้างเวกเตอร์ใน NumPy ด้วยข้อมูลโค้ดต่อไปนี้:





นำเข้า numpyเช่นเช่น

row_vector = np.array([1,2,3])
พิมพ์(row_vector)

ในข้อมูลโค้ดด้านบน เราได้สร้างเวกเตอร์แถว เราสามารถสร้างเวกเตอร์คอลัมน์ได้ดังนี้:

นำเข้า numpyเช่นเช่น

col_vector = np.array([[1],[2],[3]])
พิมพ์(col_vector)

การสร้างเมทริกซ์

เมทริกซ์สามารถเข้าใจได้ง่ายว่าเป็นอาร์เรย์สองมิติ เราสามารถสร้างเมทริกซ์ด้วย NumPy โดยสร้างอาร์เรย์หลายมิติ:



เมทริกซ์ = np.array([[1,2,3],[4,5,6],[7,8,9]])
พิมพ์(เมทริกซ์)

แม้ว่าเมทริกซ์จะคล้ายกับอาร์เรย์หลายมิติทุกประการ ไม่แนะนำโครงสร้างข้อมูลเมทริกซ์ เนื่องจากเหตุผลสองประการ:

  1. อาร์เรย์เป็นมาตรฐานเมื่อพูดถึงแพ็คเกจ NumPy
  2. การดำเนินการส่วนใหญ่ด้วย NumPy จะคืนค่าอาร์เรย์ไม่ใช่เมทริกซ์

การใช้เมทริกซ์กระจัดกระจาย

เพื่อย้ำเตือนว่า sparse matrix เป็นเมทริกซ์ที่ไอเท็มส่วนใหญ่เป็นศูนย์ ตอนนี้ สถานการณ์ทั่วไปในการประมวลผลข้อมูลและการเรียนรู้ของเครื่องคือการประมวลผลเมทริกซ์ซึ่งองค์ประกอบส่วนใหญ่เป็นศูนย์ ตัวอย่างเช่น พิจารณาเมทริกซ์ที่มีแถวอธิบายทุกวิดีโอใน Youtube และคอลัมน์แสดงถึงผู้ใช้ที่ลงทะเบียนแต่ละราย แต่ละค่าแสดงว่าผู้ใช้ดูวิดีโอหรือไม่ แน่นอน ค่าส่วนใหญ่ในเมทริกซ์นี้จะเป็นศูนย์ NS ได้เปรียบด้วยเมทริกซ์กระจัดกระจาย คือไม่เก็บค่าที่เป็นศูนย์ ซึ่งส่งผลให้ได้เปรียบในการคำนวณอย่างมากและการเพิ่มประสิทธิภาพการจัดเก็บด้วย

มาสร้าง Spark matrix ที่นี่:

จาก scipy นำเข้าเบาบาง

original_matrix = np.array([[1,0,3],[0,0,6],[7,0,0]])
sparse_matrix = sparse.csr_matrix(original_matrix)
พิมพ์(sparse_matrix)

เพื่อให้เข้าใจถึงวิธีการทำงานของโค้ด เราจะดูผลลัพธ์ที่นี่:

ในโค้ดด้านบนนี้ เราใช้ฟังก์ชันของ NumPy เพื่อสร้าง a แถวกระจัดกระจาย เมทริกซ์ที่แสดงองค์ประกอบที่ไม่ใช่ศูนย์โดยใช้ดัชนีที่เป็นศูนย์ เมทริกซ์กระจัดกระจายมีหลายประเภท เช่น:

  • คอลัมน์กระจัดกระจาย
  • รายการ
  • พจนานุกรมของคีย์

เราจะไม่พูดถึงเมทริกซ์กระจัดกระจายอื่น ๆ ที่นี่ แต่รู้ว่าการใช้แต่ละรายการมีความเฉพาะเจาะจงและไม่มีใครสามารถเรียกได้ว่า 'ดีที่สุด'

การใช้การดำเนินการกับองค์ประกอบเวกเตอร์ทั้งหมด

เป็นสถานการณ์ทั่วไปเมื่อเราต้องใช้การดำเนินการร่วมกับองค์ประกอบเวกเตอร์หลายรายการ ซึ่งสามารถทำได้โดยการกำหนดแลมบ์ดาแล้วทำให้เวกเตอร์เหมือนกัน มาดูข้อมูลโค้ดบางส่วนกัน:

เมทริกซ์ = np.array([
[1,2,3],
[4,5,6],
[7,8,9]])

mul_5 = แลมบ์ดา x: x* 5
vectorized_mul_5 = np.vectorize(mul_5)

vectorized_mul_5(เมทริกซ์)

เพื่อให้เข้าใจถึงวิธีการทำงานของโค้ด เราจะดูผลลัพธ์ที่นี่:

ในข้อมูลโค้ดข้างต้น เราใช้ฟังก์ชัน vectorize ซึ่งเป็นส่วนหนึ่งของไลบรารี NumPy เพื่อแปลงคำจำกัดความแลมบ์ดาอย่างง่ายให้เป็นฟังก์ชันที่สามารถประมวลผลแต่ละองค์ประกอบของเวกเตอร์ สิ่งสำคัญคือต้องสังเกตว่า vectorize คือ แค่วนรอบองค์ประกอบ และไม่มีผลต่อประสิทธิภาพของโปรแกรม NumPy ยังอนุญาต ออกอากาศ ซึ่งหมายความว่าแทนที่จะใช้โค้ดที่ซับซ้อนข้างต้น เราสามารถทำได้ง่ายๆ:

เมทริกซ์* 5

และผลลัพธ์ก็คงจะเหมือนกันทุกประการ ฉันต้องการแสดงส่วนที่ซับซ้อนก่อน มิฉะนั้น คุณจะข้ามส่วนนี้ไป!

ค่าเฉลี่ย ความแปรปรวน และค่าเบี่ยงเบนมาตรฐาน

ด้วย NumPy มันง่ายในการดำเนินการที่เกี่ยวข้องกับสถิติเชิงพรรณนาเกี่ยวกับเวกเตอร์ ค่าเฉลี่ยของเวกเตอร์สามารถคำนวณได้ดังนี้:

np.mean(เมทริกซ์)

ความแปรปรวนของเวกเตอร์สามารถคำนวณได้ดังนี้:

np.var(เมทริกซ์)

ค่าเบี่ยงเบนมาตรฐานของเวกเตอร์สามารถคำนวณได้ดังนี้:

เช่น มาตรฐาน(เมทริกซ์)

ผลลัพธ์ของคำสั่งข้างต้นบนเมทริกซ์ที่กำหนดได้รับที่นี่:

การย้ายเมทริกซ์

การย้ายถิ่นเป็นการดำเนินการทั่วไปที่คุณจะได้ยินทุกครั้งที่คุณถูกล้อมรอบด้วยเมทริกซ์ การแปลงค่าเป็นเพียงวิธีการสลับค่าคอลัมน์และแถวของเมทริกซ์ โปรดทราบว่า a เวกเตอร์ไม่สามารถย้ายได้ เนื่องจากเวกเตอร์เป็นเพียงชุดของค่าที่ไม่มีการแบ่งค่าเหล่านั้นออกเป็นแถวและคอลัมน์ โปรดทราบว่าการแปลงเวกเตอร์แถวเป็นเวกเตอร์คอลัมน์จะไม่ถูกแปลง (ตามคำจำกัดความของพีชคณิตเชิงเส้น ซึ่งอยู่นอกขอบเขตของบทเรียนนี้)

สำหรับตอนนี้ เราจะพบความสงบได้เพียงแค่แปลงเมทริกซ์ การเข้าถึงทรานสโพสของเมทริกซ์ด้วย NumPy นั้นง่ายมาก:

matrix.T

ผลลัพธ์ของคำสั่งข้างต้นบนเมทริกซ์ที่กำหนดได้รับที่นี่:

การดำเนินการเดียวกันสามารถทำได้บนเวกเตอร์แถวเพื่อแปลงเป็นเวกเตอร์คอลัมน์

แบนเมทริกซ์

เราสามารถแปลงเมทริกซ์เป็นอาร์เรย์หนึ่งมิติได้ หากเราต้องการประมวลผลองค์ประกอบในลักษณะเชิงเส้น สามารถทำได้ด้วยข้อมูลโค้ดต่อไปนี้:

matrix.flatten()

ผลลัพธ์ของคำสั่งข้างต้นบนเมทริกซ์ที่กำหนดได้รับที่นี่:

โปรดทราบว่าเมทริกซ์แบบแผ่เป็นอาร์เรย์แบบหนึ่งมิติ ซึ่งเป็นแบบเชิงเส้นอย่างง่าย

การคำนวณค่าลักษณะเฉพาะและเวกเตอร์ลักษณะเฉพาะ

Eigenvectors มักใช้ในแพ็คเกจการเรียนรู้ของเครื่อง ดังนั้น เมื่อแสดงฟังก์ชันการแปลงเชิงเส้นเป็นเมทริกซ์ ดังนั้น X แล้วเวกเตอร์ไอเกนเป็นเวกเตอร์ที่เปลี่ยนแปลงเฉพาะในสเกลของเวกเตอร์แต่ไม่ใช่ทิศทางของมัน เราสามารถพูดได้ว่า:

Xv = γv

โดยที่ X คือเมทริกซ์สี่เหลี่ยมจัตุรัสและ γ มีค่าลักษณะเฉพาะ นอกจากนี้ v มี Eigenvectors ด้วย NumPy ทำให้ง่ายต่อการคำนวณค่าลักษณะเฉพาะและเวกเตอร์ลักษณะเฉพาะ นี่คือข้อมูลโค้ดที่เราสาธิตสิ่งเดียวกัน:

ค่า, evectors = np.linalg.eig(เมทริกซ์)

ผลลัพธ์ของคำสั่งข้างต้นบนเมทริกซ์ที่กำหนดได้รับที่นี่:

Dot Products ของ Vectors

Dot Products of Vectors คือวิธีการคูณเวกเตอร์ 2 ตัว มันบอกคุณเกี่ยวกับ เวกเตอร์มีทิศทางเดียวกันเท่าใด ตรงข้ามกับผลคูณไขว้ที่บอกคุณตรงกันข้าม เวกเตอร์มีทิศทางเดียวกันเพียงเล็กน้อย (เรียกว่ามุมฉาก) เราสามารถคำนวณผลคูณดอทของเวกเตอร์สองตัวตามที่ระบุในข้อมูลโค้ดได้ที่นี่:

a = np.array([3,5,6])
b = np.array([2. 3,สิบห้า,1])

np.dot(ก, ข)

ผลลัพธ์ของคำสั่งดังกล่าวในอาร์เรย์ที่กำหนดได้รับที่นี่:

การบวก การลบ และการคูณเมทริกซ์

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

np.add(เมทริกซ์, เมทริกซ์)

ถัดไป สามารถลบเมทริกซ์สองตัวได้ดังนี้:

np.subtract(เมทริกซ์, เมทริกซ์)

ผลลัพธ์ของคำสั่งข้างต้นบนเมทริกซ์ที่กำหนดได้รับที่นี่:

ตามที่คาดไว้ แต่ละองค์ประกอบในเมทริกซ์จะถูกเพิ่ม/ลบด้วยองค์ประกอบที่สอดคล้องกัน การคูณเมทริกซ์คล้ายกับการหาดอทโปรดัคเหมือนที่เราทำก่อนหน้านี้:

np.dot(เมทริกซ์, เมทริกซ์)

โค้ดด้านบนจะค้นหาค่าการคูณที่แท้จริงของเมทริกซ์สองตัว โดยกำหนดเป็น:

เมทริกซ์*เมทริกซ์

ผลลัพธ์ของคำสั่งข้างต้นบนเมทริกซ์ที่กำหนดได้รับที่นี่:

บทสรุป

ในบทเรียนนี้ เราได้ดำเนินการทางคณิตศาสตร์มากมายที่เกี่ยวข้องกับเวกเตอร์ เมทริกซ์ และอาร์เรย์ ซึ่งโดยทั่วไปจะใช้การประมวลผลข้อมูล สถิติเชิงพรรณนา และวิทยาศาสตร์ข้อมูล นี่เป็นบทเรียนสั้นๆ ที่ครอบคลุมเฉพาะส่วนที่พบบ่อยที่สุดและสำคัญที่สุดของแนวคิดที่หลากหลาย แต่การดำเนินการเหล่านี้ควรให้แนวคิดที่ดีมากเกี่ยวกับการดำเนินการทั้งหมดที่สามารถดำเนินการได้ในขณะที่จัดการกับโครงสร้างข้อมูลเหล่านี้

กรุณาแบ่งปันความคิดเห็นของคุณได้อย่างอิสระเกี่ยวกับบทเรียนบน Twitter กับ @linuxhint และ @sbmaggarwal (นั่นฉัน!).