2013-08-15 11 views
5

मैट्रिक्स गुणा में, मान लें कि A एक 3 x 2 मैट्रिक्स (3 पंक्तियां, 2 कॉलम) और B एक 2 x 4 मैट्रिक्स (2 पंक्तियां, 4 कॉलम) है, तो यदि कोई मैट्रिक्स C = A * B है, तो C में 3 पंक्तियां और 4 कॉलम होना चाहिए। Numpy इस गुणा क्यों नहीं करता है? ValueError: operands could not be broadcast together with shapes (3,2) (2,4)numpy मैट्रिक्स गुणा आकार

a = np.ones((3,2)) 
b = np.ones((2,4)) 
print a*b 

मैं एक सुर और बी और हमेशा एक ही जवाब मिल के साथ प्रयास करें: जब मैं निम्नलिखित कोड की कोशिश मैं कोई त्रुटि मिलती है। क्यूं कर? मैं इस मामले में मैट्रिक्स गुणा कैसे करूं?

उत्तर

15

* संख्यात्मक सरणी के लिए ऑपरेटर तत्वानुसार गुणा (समान आयाम के सरणी के लिए हैडमार्ड उत्पाद के समान) है, मैट्रिक्स गुणा नहीं है।

उदाहरण के लिए:

>>> a 
array([[0], 
     [1], 
     [2]]) 
>>> b 
array([0, 1, 2]) 
>>> a*b 
array([[0, 0, 0], 
     [0, 1, 2], 
     [0, 2, 4]]) 

मैट्रिक्स के लिए NumPy सरणी के साथ गुणा करते हैं: प्रसारण NumPy सरणी पर

>>> a=np.matrix(np.ones((3,2))) 
>>> b=np.matrix(np.ones((2,4))) 
>>> a*b 
matrix([[ 2., 2., 2., 2.], 
     [ 2., 2., 2., 2.], 
     [ 2., 2., 2., 2.]]) 

अधिक जानकारी:

>>> a = np.ones((3,2)) 
>>> b = np.ones((2,4)) 
>>> np.dot(a,b) 
array([[ 2., 2., 2., 2.], 
     [ 2., 2., 2., 2.], 
     [ 2., 2., 2., 2.]]) 

इसके अलावा आप मैट्रिक्स वर्ग का उपयोग कर सकते here पाया जा सकता है, और मैट्रिक्स वर्ग पर अधिक जानकारीमिल सकती है।

+0

किसी को sparse.linalg numpy एक्सटेंशन से सावधान रहना चाहिए जो "लीनियरऑपरेटर" वर्ग को परिभाषित करता है। इस वर्ग में, "*" ऑपरेटर को सामान्य मैट्रिक्स डॉट उत्पाद के रूप में व्याख्या किया जाता है। – Guillaume

+0

जब किसी को numpy matrices बनाम सरणी में उपयोग करना चाहिए? हाल ही में मुझे यह भी पता नहीं था कि एक मैट्रिक्स एपीआई था। –

+0

@CharlieParker मैं matrices का उपयोग करने की अनुशंसा नहीं करता, मुझे विश्वास है कि उन्हें बहिष्कृत करने के लिए तैयार किया गया है। – Daniel

संबंधित मुद्दे