इसे सरलता से कहने के लिए, मेरे पास आयाम की एक सूची है [३२, ३१, ४] जिसे मैं आकार में कम करना चाहता हूं [३२, ३१, ३] ताकि अंतिम आयाम में प्रत्येक सरणी को एक सरणी द्वारा प्रतिस्थापित किया जा सके। आकार (3)।

        for a in range(len(liste)):                #len(list) = 95
        for b in range(len(liste[a])):             #shape = [32, 31, 3], b travels in the 1st dim.
            #print('frame : ', liste[a][b].shape)  #[31, 4]
            #print('b', b)                         #32 frames each time ok              
            for c in range(len(liste[a][b])):      

                #print('c', c)                      #31 each time ok
                #print('norme du quaternion', np.abs(np.linalg.norm(liste[a][b][c]))) #norm = 1      
                r = quat2expmap(liste[a][b][c])   #convertion to expmap successful
                #print('ExpMap : ', r)  

                quat = liste[a][b][c]
                quat = r                #this works

                #print('quat', quat)


                liste[a][b][c] = r      #this doesn't work  

अधिक सटीक होने के लिए, मेरे पास ९५ अलग-अलग इशारों का एक डेटासेट है, जिसे ३२ फ्रेम और चतुर्भुज द्वारा दर्शाया गया है। मैंने quaternions को ExpMap में बदल दिया, लेकिन आकृतियों के अंतर के कारण मैं quaternions को उनके संबंधित ExpMap द्वारा प्रतिस्थापित करने में असमर्थ हूं। मुझे सबसे अधिक प्राप्त होने वाला त्रुटि कोड निम्न है:

ValueError: could not broadcast input array from shape (3) into shape (4)

यह कोड की अंतिम पंक्ति से आता है। सबसे अजीब बात यह है कि जब मैं क्वाटरनियन को अलग करता हूं और इसे बदल देता हूं, तो यह पूरी तरह से काम करता है, फिर भी अजगर मना कर देता है कि मैं इसे अपनी सूची में करता हूं। मुझे सच में समझ नहीं आता क्यों।

क्या आप मुझे इसके बारे में हल्का कर सकते हैं? मैं अपनी सूची में उचित आयाम कैसे प्राप्त कर सकता हूं? मैंने del, remove() जैसे तमाम हथकंडे आजमाए लेकिन कोई नतीजा नहीं निकला...

0
change le nom du compte fdp 15 अप्रैल 2020, 17:27

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा लगता है कि आप numpy arrays (पायथन सूचियां नहीं) का उपयोग कर रहे हैं। Numpy किसी सरणी के एक तत्व को असाइनमेंट पर आयामों को बदलने की अनुमति नहीं देता है क्योंकि यह अनियमित हो जाएगा (कुछ प्रविष्टियाँ 4 और कुछ 3 के साथ)।

इसके अलावा, लूप का उपयोग करके numpy arrays के माध्यम से पुनरावृत्ति करना numpy का उपयोग करने का गलत तरीका है। इस मामले में आप शायद आकार के एक नए मैट्रिक्स (95,32,31,3) का उत्पादन करने के लिए अपने मैट्रिक्स के चौथे आयाम में quat2expmap फ़ंक्शन को लागू करने पर विचार कर रहे हैं। यह numpy's parallelism का अधिकतम उपयोग करेगा और बिना किसी लूप के कुछ पंक्तियों में लिखा जा सकता है।

आप या तो quat2expmap फ़ंक्शन को संशोधित कर सकते हैं ताकि यह सीधे आपके 4d मैट्रिक्स पर काम करे (सबसे तेज़ तरीका होगा) या np.apply_along_axis (जो लूप से बहुत तेज़ नहीं है) का उपयोग करें।

0
Alain T. 15 अप्रैल 2020, 14:55