हालांकि जुड़े प्रश्न सामान्य मुद्दे को बताते हैं, इस विशेष मामले के लिए एक संख्यात्मक विशिष्ट स्पष्टीकरण है। असल में, उन उत्तरों का कहना है, "यह शामिल चर के प्रकार पर निर्भर करता है", और जो मैं नीचे दे रहा हूं वह numpy प्रकारों के लिए स्पष्टीकरण है।
जब आप x + y
करते हैं, तो नतीजे परिणाम के लिए "सबसे कम आम denominator" डेटाटाइप का उपयोग करता है। चूंकि x
int है और y
फ़्लोट है, इसका मतलब है कि यह एक फ्लोट सरणी देता है।
लेकिन जब आप x += y
करते हैं, तो आप इसे x
के प्रकार के अनुरूप करने के लिए मजबूर कर रहे हैं, जो int
है। यह दशमलव भाग को छोटा करता है और सभी x
मानों को वापस 1 पर छोड़ देता है। इस तरह numpy संवर्धित असाइनमेंट ऑपरेटरों को परिभाषित करता है: यह वापसी मान को असाइनमेंट लक्ष्य के समान ही प्रकार के होने के लिए मजबूर करता है।
आप x = (x + y).astype(int)
(स्पष्ट रूप से डीटीपी को वापस करने के लिए मजबूर कर रहे हैं) द्वारा दूसरे उदाहरण से पहला व्यवहार प्राप्त कर सकते हैं। आप x = np.repeat([1.0], 10)
देकर पहले उदाहरण से दूसरा व्यवहार प्राप्त कर सकते हैं (फ्लोट x
का उपयोग करके टाइपटाइप फ्लोट है, इसलिए अब आप बिना छेड़छाड़ के y
जोड़ सकते हैं)।
वास्तव में डुप्लिकेट की बजाय फ्लोट की एक नई सरणी। संक्षिप्त उत्तर: जादू "मंदर" विधियों के कार्यान्वयन पर निर्भर करता है '__add__' और '__iadd__' –
** यह डुप्लिकेट ** नहीं है, यह' numpy' – jamylak
@jamylak ओह - वास्तव में, अच्छी पकड़, धन्यवाद! –