Avoid copy method in Python -


मैंने __future__ आयात डिवीजन आयात से डी कास्टेलजौ अल्गोरिदम

  लागू करने के लिए अजगर में एक फ़ंक्शन लिखी थी एनपी आयात कॉपी डीईपी डीकास्टेलजाऊ (पी, टी) के रूप में अंडाकार: श्रेणी में एन (एन -1) के लिए एन = लेन (पी): श्रेणी आर (एन -1 के) के लिए: पी [आर] = (1-टी ) * पी [आर] + टी * पी [आर + 1] रिटर्न पी [0]  

और निम्नलिखित डेटा के साथ फ़ंक्शन को कॉल किया जाता है

  पी = Np.array ([[1., 1।], [2., 3]], [3., 2।]], Dtype = float) एम = 1000 जी में सीमा (एम): टी = डीकास्टेलजाऊ (   

जो कि के लगभग सभी मूल्यों के लिए हजारों (गलत) परिणाम [3,2] का नेतृत्व करते हैं, टी = जी / (एम -1) मैंने कोड को

  डीईएफ़ डीकास्टेलजाऊ (पी, टी) में बदल दिया है: एन = लेन (पी) क्यू = प्रतिलिपि .पीपी (पी) के लिए श्रेणी में (एन -1): आर के लिए श्रेणी (एन -1-कश्मीर): क्यू [आर] = (1-टी) * क्यू [आर] + टी * क्यू [आर + 1] वापसी क्यू [0]   

ऐसा मैंने इसे बदलने से पहले सरणी P की प्रतिलिपि बनाई है, और अब डेटा सही है। मुझे वाकई समझ में नहीं आता है कि यह अब क्यों काम करता है और मैं सोच रहा था कि प्रतिलिपि विधि के बिना कोई समाधान है? धन्यवाद!

यहां कॉपी विधि के बिना डेटा प्लॉट है और प्रतिलिपि विधि के साथ डेटा प्लॉट है:

जाहिर है, पहली साजिश सही नहीं है। पहली साजिश में इसका सबसे अधिक 3,2 में बिन्दु है, जो कि मुझे नहीं चाहिए।

समस्या अजगर में है, तो आप केवल एक वैरिएबल के लिए लिंक देते हैं, न ही मान, ताकि आप बेस सूची को संशोधित कर सकें। लिंक के रूप में प्रेषित सभी परिवर्तन योग्य प्रकार आप अजगर प्रलेखन के अनुभाग में इसके बारे में अधिक पढ़ सकते हैं।

यदि आप प्रतिलिपि समारोह से बचने के लिए चाहते हैं तो आप बस लिख सकते हैं

  Q = P [:]  < / पूर्व> 

और ये आपको केवल जरूरत है: -)

इसके अलावा भी एक अच्छा जवाब है


Comments

Popular posts from this blog

python - Strange behavior using PyQt4's 'pyqtSlot' decorator before another decorator -

c# - UnhandledExceptionMode.ThrowException for AppDomain.UnhandledException -

c# - Process.Kill() returns access denied -