प्रसारित करते समय स्वचालित रूप से सरणी के आयामों का विस्तार करें Numpy सरणी प्रसारण में निम्न अभ्यास पर विचार करें।बेवकूफ, पायथन:
import numpy as np
v = np.array([[1.0, 2.0]]).T # column array
A2 = np.random.randn(2,10) # 2D array
A3 = np.random.randn(2,10,10) # 3D
v * A2 # works great
# causes error:
v * A3 # error
मैं प्रसारण के लिए Numpy नियम पता है, और मैं Matlab में bsxfun
कार्यक्षमता से परिचित हूँ। मैं समझता हूं कि एक (2, एन, एन) सरणी में एक (2,1) सरणी को प्रसारित करने का प्रयास क्यों विफल रहता है, और मुझे इससे पहले (2,1) सरणी (2,1,1) सरणी में दोहराएं प्रसारण के माध्यम से चला जाता है।
मेरा प्रश्न है: क्या कोई तरीका है कि पाइथन को किसी भी सरणी की आयाम को स्वचालित रूप से पैड करने के लिए कहने का कोई तरीका है, बिना किसी विशेष रूप से आवश्यक आयाम बताए?
मैं अन्यथा मैं कुछ बेवकूफ और mult_v_A = lambda v,A: v.reshape([v.size] + [1]*(A.ndim-1)) * A
तरह मूर्खता से बदसूरत कर सकता है स्पष्ट रूप से जोड़ी को (2,1) बहुआयामी सरणी इसके खिलाफ प्रसारित किया जा रहा है के साथ वेक्टर नहीं करना चाहते ---। मुझे समय से पहले पता नहीं है कि "ए" सरणी 2 डी या 3 डी या एन-डी होगी।
मैटलैब की bsxfun
प्रसारण कार्यक्षमता अनिवार्य रूप से आवश्यक आयामों को पैड करता है, इसलिए मुझे उम्मीद है कि मैं पाइथन में कुछ कर सकता हूं।
मेरा विचार यह है कि यह एक सुविधा है और एक बग नहीं है। उदाहरण के लिए, मान लीजिए कि आपके पास 2-बाय-1 कॉलम वेक्टर 'v' था और फिर आपके पास 2-बाय-2-बाय -10' ndarray' था। क्या आप आकार '(2,1,1)' या आकार '(1,2,1)' रखने के लिए 'v' को दोबारा बदलना चाहते हैं? यदि आप केवल आयामों को पैड करते हैं, तो यह उपयोगकर्ता के लिए अस्पष्ट हो सकता है। एक स्पष्ट पुनर्विक्रय को मजबूर करना एक बेहतर सामान्य प्रक्रिया है, और यदि उपयोगकर्ता के पास एक निश्चित सम्मेलन है तो स्वचालित रूप से रीशेपिंग करने के लिए इसे एक विशेष फ़ंक्शन लिखने के लिए उपयोगकर्ता को छोड़ दें। लेकिन वैश्विक 'numpy' आयाम-पैडर बनाने के लिए अच्छा नहीं है जो आपके ऊपर एक सम्मेलन को मजबूर करता है। दुरुपयोग करना बहुत आसान होगा। – ely
-1 @EMS। इस अस्पष्टता को आसानी से हल करके हल किया जाता है कि प्रसारण में पहला गैर-सिंगलटन आयाम का उपयोग किया जाएगा। पेशेवर प्रोग्रामर और एप्लाइड गणितज्ञों द्वारा उपयोग की जाने वाली प्रणालियों के लिए "इस तरह यह बेहतर है" का यह दृष्टिकोण पूरी तरह अनुचित है --- यह एक विशेषता नहीं है, यह अवैधता और complectedness के मामले में एक दोष है। –
-1 @ अहमद फसीह। मैं एक लागू गणितज्ञ हूं जो हर दिन वैज्ञानिक अनुप्रयोगों के लिए पायथन कोड लिखता है, और मुझे लगता है कि पहले गैर-सिंगलटन आयाम को अपनाने का आपका प्रस्तावित सम्मेलन बहुत खराब होगा। आपके लिए एक ऐसा कार्य लिखना बेहतर होगा जो न्यूमपी डेवलपर्स के मुकाबले उस सम्मेलन को गोद लेता है, जो कि कुछ उपयोगकर्ताओं (जैसे आप) को लाभ पहुंचाता है, लेकिन कुछ अन्य उपयोगकर्ताओं (जैसे मुझे) के लिए उपयोगी नहीं होगा। – ely