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
और 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
(या @
ऊपर दिखाए गए अनुसार पायथन> = 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
तों यहाँ ।