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 คือarrays
VS NumPy matrix
es นี่