Numpy matricesเป็น 2 มิติอย่างเคร่งครัดในขณะที่ numpy arrays (ndarrays) เป็น N-dimension วัตถุเมทริกซ์เป็นคลาสย่อยของ ndarray ดังนั้นพวกเขาจึงสืบทอดคุณสมบัติและวิธีการของ ndarray ทั้งหมด
ข้อได้เปรียบหลักของเมทริกซ์ numpy ก็คือพวกมันให้สัญกรณ์ที่สะดวกสำหรับการคูณเมทริกซ์: ถ้า a และ b เป็นเมทริกซ์a*bนั่นคือผลคูณเมทริกซ์ของพวกมัน
import numpy as np
a = np.mat('4 3; 2 1')
b = np.mat('1 2; 3 4')
print(a)
# [[4 3]
# [2 1]]
print(b)
# [[1 2]
# [3 4]]
print(a*b)
# [[13 20]
# [ 5 8]]
ในทางตรงกันข้ามในฐานะของ Python 3.5 NumPy รองรับการคูณเมทริกซ์ infix โดยใช้@โอเปอเรเตอร์ดังนั้นคุณจะได้รับความสะดวกสบายเหมือนกันกับการคูณเมทริกซ์กับ ndarrays ใน Python> = 3.5
import numpy as np
a = np.array([[4, 3], [2, 1]])
b = np.array([[1, 2], [3, 4]])
print(a@b)
# [[13 20]
# [ 5 8]]
ทั้งเมทริกซ์ออบเจ็กต์และ ndarrays จะต้อง.Tส่งคืนทรานสโพสต์ แต่วัตถุเมทริกซ์ก็มี.Hไว้สำหรับคอนจูเกตทรานสคูนและ.Iอินเวอร์ส
ในทางตรงกันข้ามอาร์เรย์ numpy ปฏิบัติตามกฎที่การดำเนินการถูกนำไปใช้องค์ประกอบที่ชาญฉลาด (ยกเว้นสำหรับ@ผู้ประกอบการใหม่) ดังนั้นถ้าaและbเป็นอาร์เรย์ numpy แล้วa*bอาร์เรย์ที่เกิดขึ้นจากการคูณองค์ประกอบองค์ประกอบที่ชาญฉลาด:
c = np.array([[4, 3], [2, 1]])
d = np.array([[1, 2], [3, 4]])
print(c*d)
# [[4 6]
# [6 4]]
ในการรับผลลัพธ์ของการคูณเมทริกซ์คุณใช้np.dot(หรือ@ใน Python> = 3.5 ดังที่แสดงด้านบน):
print(np.dot(c,d))
# [[13 20]
# [ 5 8]]
ตัว**ดำเนินการยังทำงานแตกต่างกัน:
print(a**2)
# [[22 15]
# [10 7]]
print(c**2)
# [[16 9]
# [ 4 1]]
ตั้งแต่aเป็นเมทริกซ์ผลตอบแทนผลิตภัณฑ์แมทริกซ์a**2 a*aเนื่องจากcเป็น ndarray ให้c**2ส่งคืน ndarray ด้วยองค์ประกอบแต่ละองค์ประกอบกำลังสองที่ชาญฉลาด
มีความแตกต่างทางเทคนิคอื่น ๆ ระหว่างวัตถุเมทริกซ์และ ndarrays (เกี่ยวข้องกับการnp.ravelเลือกรายการและพฤติกรรมการเรียงลำดับ)
ประโยชน์หลักของอาร์เรย์ numpy คือพวกเขามีทั่วไปมากขึ้นกว่าการฝึกอบรม จะเกิดอะไรขึ้นเมื่อคุณต้องการอาร์เรย์สามมิติ ถ้าอย่างนั้นคุณต้องใช้ ndarray ไม่ใช่วัตถุเมทริกซ์ ดังนั้นการเรียนรู้ที่จะใช้วัตถุเมทริกซ์เป็นงานที่มากขึ้น - คุณต้องเรียนรู้การทำงานของวัตถุเมทริกซ์และการดำเนินการตามลำดับ
การเขียนโปรแกรมที่ผสมทั้งเมทริกซ์และอาเรย์ทำให้ชีวิตของคุณลำบากเพราะคุณต้องคอยติดตามว่าวัตถุของคุณเป็นตัวแปรประเภทใดเพื่อไม่ให้การคูณทวีคืนสิ่งที่คุณไม่คาดคิด
ในทางตรงกันข้ามหากคุณยึดติดกับ ndarrays เพียงอย่างเดียวคุณสามารถทำทุกสิ่งที่วัตถุเมทริกซ์สามารถทำได้และอื่น ๆ ยกเว้นฟังก์ชั่น / สัญกรณ์ที่แตกต่างกันเล็กน้อย
หากคุณยินดีที่จะยอมแพ้การดึงดูดสายตาของสัญกรณ์ผลิตภัณฑ์ NumPy matrix (ซึ่งสามารถทำได้เกือบจะหรูหราด้วย ndarrays ใน Python> = 3.5) ฉันคิดว่าอาร์เรย์ของ NumPy เป็นหนทางที่แน่นอนที่จะไป
PS แน่นอนคุณจริงๆไม่ต้องเลือกอย่างใดอย่างหนึ่งที่ค่าใช้จ่ายของคนอื่นตั้งแต่np.asmatrixและnp.asarrayช่วยให้คุณสามารถแปลงหนึ่งไปยังอีก (ตราบเท่าที่อาร์เรย์ 2 มิติ)
มีบทสรุปของความแตกต่างระหว่าง NumPy คือarraysVS NumPy matrixes นี่