गणित में, मुझे लगता है कि अंको में डॉट अधिक समझ में आता है
डॉट (ए, बी) _ {आई, जे, के, ए, बी, सी} =
चूंकि यह डॉट उत्पाद देता है जब ए और बी वैक्टर होते हैं, या मैट्रिक्स जब ए और बी मैट्रिक्स होते हैं
के रूप में matmul आपरेशन के लिए numpy में, यह डॉट परिणाम के कुछ हिस्सों के होते हैं , और इसे के रूप में परिभाषित किया जा सकता है
> मटमुल (ए, बी) _ {i, j, k, c} =
तो, आप देख सकते हैं कि मटमुल (ए, बी) एक सरणी को एक छोटे आकार के साथ लौटाता है, जिसमें मेमोरी की छोटी खपत होती है और अनुप्रयोगों में अधिक समझ आती है। विशेष रूप से, प्रसारण के साथ संयोजन , आप प्राप्त कर सकते हैं
मटमुल (ए, बी) _ {i, j, k, l} =
उदाहरण के लिए।
उपरोक्त दो परिभाषाओं से, आप उन दो कार्यों का उपयोग करने के लिए आवश्यकताओं को देख सकते हैं। A.shape = (s1, s2, s3, s4) और b.shape = (t1, t2, t3, t4) मान लें
डॉट (ए, बी) का उपयोग करने के लिए आपको चाहिए
- t3 = s4 ;
मैटमुल (ए, बी) का उपयोग करने के लिए आपको चाहिए
- t3 = एस 4
- t2 = s2 , या t2 और s2 में से एक 1 है
- t1 = s1 , या t1 और s1 में से एक 1 है
अपने आप को समझाने के लिए कोड के निम्नलिखित टुकड़े का उपयोग करें।
कोड नमूना
import numpy as np
for it in xrange(10000):
a = np.random.rand(5,6,2,4)
b = np.random.rand(6,4,3)
c = np.matmul(a,b)
d = np.dot(a,b)
#print 'c shape: ', c.shape,'d shape:', d.shape
for i in range(5):
for j in range(6):
for k in range(2):
for l in range(3):
if not c[i,j,k,l] == d[i,j,k,j,l]:
print it,i,j,k,l,c[i,j,k,l]==d[i,j,k,j,l] #you will not see them