Numpy matrices कड़ाई से 2-आयामी हैं, जबकि सुन्न arrays (ndarrays) N-आयामी हैं। मैट्रिक्स ऑब्जेक्ट ndarray का एक उपवर्ग हैं, इसलिए वे ndarrays की सभी विशेषताओं और विधियों को विरासत में लेते हैं।
सुपीरियर मेट्रिसेस का मुख्य लाभ यह है कि वे मैट्रिक्स गुणन के लिए एक सुविधाजनक अंकन प्रदान करते हैं: यदि ए और बी मैट्रिस हैं, तो 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 मैट्रिक्स गुणा का समर्थन करता है , इसलिए आप Python> = 3.5 में ndarrays के साथ मैट्रिक्स गुणा की समान सुविधा प्राप्त कर सकते हैं।
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व्युत्क्रम के लिए भी है।
इसके विपरीत, सुन्न सरणियाँ लगातार इस नियम का पालन करती हैं कि संचालन को तत्व-वार (नए @ऑपरेटर को छोड़कर ) लागू किया जाता है । इस प्रकार, यदि aऔर bNumPy सरणी हैं, तो 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(या @ऊपर दिखाए गए अनुसार पायथन> = 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आइटम चयन और अनुक्रम व्यवहार के साथ क्या करना है) के बीच अन्य तकनीकी अंतर हैं ।
सुन्न सरणियों का मुख्य लाभ यह है कि वे 2-आयामी मेट्रिसेस की तुलना में अधिक सामान्य हैं । क्या होता है जब आप एक 3-आयामी सरणी चाहते हैं? तब आपको एक ndarray का उपयोग करना होगा, न कि मैट्रिक्स ऑब्जेक्ट। इस प्रकार, मैट्रिक्स ऑब्जेक्ट्स का उपयोग करना सीखना अधिक काम है - आपको मैट्रिक्स ऑब्जेक्ट संचालन, और ndarray संचालन सीखना होगा।
एक प्रोग्राम लिखना जो मैट्रिसेस और सरणियों दोनों को मिलाता है, आपके जीवन को कठिन बनाता है क्योंकि आपको इस बात का ट्रैक रखना होगा कि आपके चर किस प्रकार के ऑब्जेक्ट हैं, ऐसा न हो कि गुणा गुणक कुछ ऐसी चीज़ लौटाए जिसकी आपको उम्मीद नहीं है।
इसके विपरीत, यदि आप पूरी तरह से ndarrays के साथ चिपके रहते हैं, तो आप कुछ भी अलग-अलग कार्यों / संकेतन को छोड़कर मैट्रिक्स की सभी चीजें कर सकते हैं, और अधिक कर सकते हैं।
यदि आप NumPy मैट्रिक्स उत्पाद संकेतन की दृश्य अपील को छोड़ने के लिए तैयार हैं (जिसे Python> = 3.5 में ndarrays के साथ लगभग समान रूप से प्राप्त किया जा सकता है), तो मुझे लगता है कि NumPy सरणियाँ निश्चित रूप से जाने का रास्ता हैं।
पुनश्च। बेशक, आपको वास्तव में दूसरे की कीमत पर एक को चुनने की ज़रूरत नहीं है, क्योंकि np.asmatrixऔर np.asarrayआपको एक को दूसरे में बदलने की अनुमति है (जब तक कि सरणी 2-आयामी है)।
वहाँ NumPy के बीच मतभेद का सारांश है arraysबनाम NumPy matrixतों यहाँ ।