2017-11-30 32 views
5

मैं चार tensorsVectorising numpy.einsum

निम्नलिखित है
  1. एच (ज, आर)
  2. ए (एक, आर)
  3. डी (घ, आर)
  4. टी (एक, टी , आर)

a में प्रत्येक i के लिए, वहाँ आकार (t, r) की इसी T[i] है। पाश के लिए एक का उपयोग किए बिना

pred = np.einsum('hr, ar, dr, tr ->hadt', H, A, D, T[0]) 
for i in range(a): 
    pred[:, i:i+1, :, :] = np.einsum('hr, ar, dr, tr ->HADT', H, A[i:i+1], D, T[i]) 

हालांकि, मैं इस गणना करना चाहते हैं:

मैं एक np.einsum करने के लिए निम्न परिणाम (pred) का उत्पादन करने की जरूरत है। कारण यह है कि मैं autograd का उपयोग कर रहा हूं जो वर्तमान में आइटम असाइनमेंट के साथ काम नहीं करता है!

उत्तर

3

एक तरह से T के लिए सभी आयामों का उपयोग होगा -

np.einsum('Hr, Ar, Dr, ATr ->HADT', H, A, D, T) 

, जब से हम है, जबकि उत्पादन में अन्य सभी (कुल्हाड़ियों) रखते हुए, मैं डॉन सभी आदानों भर axis- r योग-कम करने की जरूरत बीएलएएस का लाभ उठाने के लिए इस पर किसी भी बिंदु-आधारित उपकरण को लाने/लाने का कोई मध्यवर्ती तरीका नहीं दिख रहा है।

+0

धन्यवाद! मैं किसी भी तरह (गलत तरीके से) सोचा था कि यह एक बुरा अभ्यास हो सकता है कि समान वर्णों को ईन्सम स्ट्रिंग में दोहराया जाए। जैसे, हमारे पास दो -> '' के एलएचएस पर हैं। मुझे लगता है कि यह प्रतिबंध '->' के आरएचएस पर लागू होता है? विभिन्न चर के लिए एलएचएस पर –

+0

@ निपुनबत्रा पुनरावृत्ति का अर्थ है उन्हें गठबंधन रखें। स्पष्ट कारणों से एक चर के लिए पुनरावृत्ति की अनुमति नहीं है या एलएचएस या आरएचएस की अनुमति नहीं है। – Divakar

+0

'ii' ट्रेस है, 'ii-> i' विकर्ण है। 'मैं, मैं' और 'मैं, मैं-> मैं भी ठीक हूँ। आउटपुट में '-> ii' दोहराया जाना गलत है। – hpaulj