dot
मैट्रिक्स गुणन है, लेकिन *
कुछ और करता है।
हमारे पास दो सरणियाँ हैं:
X
, आकार (97,2)
y
, आकार (2,1)
Numpy सरणियों के साथ, ऑपरेशन
X * y
तत्व-वार किया जाता है, लेकिन एक या दोनों मानों को एक या अधिक आयामों में विस्तारित किया जा सकता है ताकि उन्हें संगत बनाया जा सके। इस ऑपरेशन को प्रसारण कहा जाता है। आयाम जहां आकार 1 है या जो गायब हैं, उनका उपयोग प्रसारण में किया जा सकता है।
आयाम से ऊपर के उदाहरण असंगत हैं, क्योंकि:
97 2
2 1
यहां पहले आयाम (97 और 2) में परस्पर विरोधी संख्याएं हैं। यही कारण है कि ऊपर ValueError के बारे में शिकायत है। दूसरा आयाम ठीक होगा, क्योंकि नंबर 1 किसी भी चीज के साथ संघर्ष नहीं करता है।
प्रसारण नियमों के बारे में अधिक जानकारी के लिए: http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
(कृपया ध्यान दें कि यदि X
और y
प्रकार के हैं numpy.matrix
, तो तारांकन का उपयोग मैट्रिक्स गुणन के रूप में किया जा सकता है। मेरी अनुशंसा इससे दूर रहने की है numpy.matrix
, यह चीजों को सरल बनाने की तुलना में अधिक जटिल हो जाता है।)
आपकी सरणियाँ ठीक होनी चाहिए numpy.dot
; यदि आपको कोई त्रुटि मिलती है numpy.dot
, तो आपके पास कुछ अन्य बग होना चाहिए। यदि आकार गलत हैं numpy.dot
, तो आपको एक अलग अपवाद मिलेगा:
ValueError: matrices are not aligned
यदि आपको अभी भी यह त्रुटि मिलती है, तो कृपया समस्या का एक न्यूनतम उदाहरण पोस्ट करें। आपके जैसे आकार वाले सरणियों के साथ एक उदाहरण गुणा सफल होता है:
In [1]: import numpy
In [2]: numpy.dot(numpy.ones([97, 2]), numpy.ones([2, 1])).shape
Out[2]: (97, 1)
X*y
काम नहीं करना चाहिए (और यह नहीं है),np.dot(X,y)
औरX.dot(y))
काम करना चाहिए (और मेरे लिए वे करते हैं)।