2016-02-14 7 views
6

प्राप्त करने के लिए क्षमा में दो 2-डी सरणी के नम्पी डॉट उत्पाद बुरी तरह से समझाया गया शीर्षक के लिए खेद है। मैं अपने कोड के एक हिस्से को समानांतर करने की कोशिश कर रहा हूं और एक डॉट उत्पाद पर फंस गया हूं। मैं कर क्या नीचे कोड है, मुझे यकीन है कि वहाँ एक सरल रेखीय बीजगणित समाधान है की एक कारगर तरीका रहा हूँ, लेकिन मैं बहुत अटक कर रहा हूँ:3-डी सरणी

puy = np.arange(8).reshape(2,4) 
puy2 = np.arange(12).reshape(3,4) 

print puy, '\n' 
print puy2.T 

zz = np.zeros([4,2,3]) 

for i in range(4): 
    zz[i,:,:] = np.dot(np.array([puy[:,i]]).T, 
       np.array([puy2.T[i,:]])) 

उत्तर

6

एक तरह से np.einsum उपयोग करने के लिए है, जो की अनुमति देता है किया जाएगा आप तय कर सकते हैं क्या सूचकांकों का क्या करना चाहते हैं:

>>> np.einsum('ik,jk->kij', puy, puy2) 
array([[[ 0, 0, 0], 
     [ 0, 16, 32]], 

     [[ 1, 5, 9], 
     [ 5, 25, 45]], 

     [[ 4, 12, 20], 
     [12, 36, 60]], 

     [[ 9, 21, 33], 
     [21, 49, 77]]]) 
>>> np.allclose(np.einsum('ik,jk->kij', puy, puy2), zz) 
True