बेवकूफ matrices सख्ती से 2-आयामी हैं, जबकि numpy arrays (ndarrays) एन-आयामी हैं। मैट्रिक्स ऑब्जेक्ट्स ndarray का उप-वर्ग हैं, इसलिए वे सभी एंटरप्राइज़ के गुणों और विधियों का उत्तराधिकारी हैं।
numpy matrices का मुख्य लाभ यह है कि वे मैट्रिक्स गुणा के लिए सुविधाजनक नोटेशन प्रदान करते हैं: यदि ए और बी matrices हैं, तो एक * बी उनके मैट्रिक्स उत्पाद है।
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]]
दूसरी ओर, अजगर 3.5 के रूप में, NumPy इन्फ़िक्स मैट्रिक्स @
ऑपरेटर का उपयोग गुणा है, तो आप अजगर> = 3.5 में ndarrays साथ आव्यूह गुणन का एक ही सुविधा प्राप्त कर सकते हैं समर्थन करता है।
import numpy as np
a=np.array([[4, 3], [2, 1]])
b=np.array([[1, 2], [3, 4]])
print([email protected])
# [[13 20]
# [ 5 8]]
दोनों मैट्रिक्स वस्तुओं और ndarrays पक्षांतरित वापस जाने के लिए .T
है, लेकिन मैट्रिक्स वस्तुओं भी संयुग्म पक्षांतरित के लिए .H
, और उलटा के लिए .I
है।
इसके विपरीत, numpy arrays लगातार नियम का पालन करते हैं कि संचालन लागू तत्व-वार (नए @
ऑपरेटर को छोड़कर) लागू होते हैं। इस प्रकार, यदि 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, आइटम चयन और अनुक्रम व्यवहार के साथ करने के लिए) के बीच अन्य तकनीकी अंतर हैं।
numpy arrays का मुख्य लाभ यह है कि वे 2-आयामी matrices से अधिक सामान्य हैं। क्या होता है जब आप 3-आयामी सरणी चाहते हैं? फिर आपको एक ndarray का उपयोग करना है, मैट्रिक्स ऑब्जेक्ट नहीं।इस प्रकार, मैट्रिक्स ऑब्जेक्ट्स का उपयोग करना सीखना अधिक काम है - आपको मैट्रिक्स ऑब्जेक्ट ऑपरेशंस और ndarray ऑपरेशंस सीखना होगा।
एक कार्यक्रम, अपने जीवन मुश्किल बनाता है क्योंकि आप वस्तु अपने चर हैं कि किस प्रकार का ट्रैक रखने के लिए है दोनों मैट्रिक्स और सरणियों का उपयोग करता है ऐसा न हो कि गुणा वापसी कुछ आप की उम्मीद नहीं है लेखन।
इसके विपरीत, यदि आप पूरी तरह से ndarrays के साथ चिपके रहते हैं, तो आप मैट्रिक्स ऑब्जेक्ट्स कर सकते हैं, और कुछ भी अलग-अलग फ़ंक्शन/नोटेशन को छोड़कर कर सकते हैं।
यदि आप न्यूप्पी मैट्रिक्स उत्पाद नोटेशन (जो लगभग पाइथन> = 3.5 में अंडाकारों के साथ सुंदरता से प्राप्त किया जा सकता है) की दृश्य अपील को छोड़ने के इच्छुक हैं, तो मुझे लगता है कि NumPy arrays निश्चित रूप से जाने का तरीका हैं।
पीएस। बेशक, आपको np.asmatrix
और np.asarray
के बाद आपको एक दूसरे को बदलने की अनुमति देता है ( लंबे समय तक सरणी 2-आयामी) के रूप में आपको अन्य को देखने की ज़रूरत नहीं है।
NumPy arrays
के बीच मतभेद बनाम NumPy matrix
तों here का सारांश है।
मेरे पास उत्तर को उचित ठहराने के लिए पर्याप्त जानकारी नहीं है लेकिन जो मैं मुख्य अंतर बता सकता हूं उससे गुणा का कार्यान्वयन है। एक मैट्रिक्स मैट्रिक्स/टेंसर गुणा करता है, जबकि एक सरणी तत्व-वार गुणा करेगा। –
पायथन 3.5 ने मैट्रिक्स गुणा (पीईपी 465) के लिए इंफिक्स @ ऑपरेटर जोड़ा, और इसके लिए न्यूमपी 1.10 जोड़ा गया समर्थन। तो यदि आप पाइथन 3.5+ और न्यूपी 1.10+ का उपयोग कर रहे हैं, तो आप 'ए डॉट (बी)' के बजाय केवल 'ए @ बी' लिख सकते हैं, जहां 'ए' और' बी '2 डी' ndarray' हैं। यह सादा 'ndarray's, IMHO के बजाय' matrix' का उपयोग करने का मुख्य लाभ हटा देता है। – MiniQuark