NumPy 1.14 - numpy.linalg.multi_dot()

numpy.linalg.multi_dot




numpy

numpy.linalg.multi_dot

numpy.linalg.multi_dot(arrays) [source]

एकल फ़ंक्शन कॉल में दो या दो से अधिक सरणियों के डॉट उत्पाद की गणना करें, जबकि स्वचालित रूप से सबसे तेज़ मूल्यांकन क्रम का चयन करते हैं।

multi_dot चेन numpy.dot और numpy.dot [R8182] [R8282] इष्टतम कोष्ठक का उपयोग करता है। मेट्रिसेस के आकार के आधार पर, यह गुणन को बहुत तेज कर सकता है।

यदि पहला तर्क 1-डी है तो इसे पंक्ति वेक्टर के रूप में माना जाता है। यदि अंतिम तर्क 1-डी है तो इसे कॉलम वेक्टर के रूप में माना जाता है। अन्य तर्क 2-डी होने चाहिए।

multi_dot बारे में multi_dot :

def multi_dot(arrays): return functools.reduce(np.dot, arrays)
पैरामीटर:

arrays : array_like का क्रम

यदि पहला तर्क 1-डी है तो इसे पंक्ति वेक्टर के रूप में माना जाता है। यदि अंतिम तर्क 1-डी है तो इसे कॉलम वेक्टर के रूप में माना जाता है। अन्य तर्क 2-डी होने चाहिए।

यह दिखाता है:

आउटपुट : ndarray

प्रदत्त सरणियों का डॉट उत्पाद लौटाता है।

यह भी देखें

dot
डॉट दो तर्कों के साथ गुणा।

टिप्पणियाँ

मैट्रिक्स गुणन के लिए लागत की गणना निम्नलिखित फ़ंक्शन के साथ की जा सकती है:

def cost(A, B):
    return A.shape[0] * A.shape[1] * B.shape[1]

मान लेते हैं कि हमारे पास तीन मैट्रेस हैं A_ {10x100}, B_ {100x5}, C_ {5x50}

दो भिन्न कोष्ठक के लिए लागत इस प्रकार हैं:

cost((AB)C) = 10*100*5 + 10*5*50   = 5000 + 2500   = 7500
cost(A(BC)) = 10*100*50 + 100*5*50 = 50000 + 25000 = 75000

संदर्भ

[R8182] ( 1 , 2 ) कॉर्मेन, "एल्गोरिदम का परिचय", अध्याय 15.2, पी। 370-378
[R8282] ( 1 , 2 ) http://en.wikipedia.org/wiki/Matrix_chain_multiplication

उदाहरण

multi_dot आपको लिखने की अनुमति देता है:

>>> from numpy.linalg import multi_dot
>>> # Prepare some data
>>> A = np.random.random(10000, 100)
>>> B = np.random.random(100, 1000)
>>> C = np.random.random(1000, 5)
>>> D = np.random.random(5, 333)
>>> # the actual dot multiplication
>>> multi_dot([A, B, C, D])

के बजाय:

>>> np.dot(np.dot(np.dot(A, B), C), D)
>>> # or
>>> A.dot(B).dot(C).dot(D)