2012-09-25 5 views
9

अगर मैं निम्नलिखित कोड चलाने: यदि मैं बदल b += cb = b + c करने के लिए, कोड ठीक चलाताटाइप एरर संख्यात्मक सरणी पर इनस्थल ऑपरेशंस का उपयोग करते समय उत्पन्न हुआ?

TypeError: ufunc 'add' output (typecode 'O') could not be coerced to provided 
output parameter (typecode 'd') according to the casting rule ''same_kind'' 

:

import numpy as np 

b = np.zeros(1) 
c = np.zeros(1) 
c = c/2**63 

print b, c 
b += c 

मैं यह त्रुटि संदेश मिलता है। ऐसा क्यों है? मैं आरएचईएल पर पायथन 2.7.2 चला रहा हूं।

NumPy संस्करण: 2.0.0.dev-a2a9dfb

जीसीसी संस्करण: 4.1.2 20,080,704 (रेड हैट 4.1.2-52)

अग्रिम धन्यवाद।

+2

कृपया अपने numpy संस्करण ('print np.version.version') और अपने 'gcc --version' (खोल से) पोस्ट करें, क्योंकि हमें बग रिपोर्ट की जानकारी चाहिए। –

+1

मुझे इसी समस्या के साथ '/ =' था। आपकी पोस्ट को हल करने के लिए धन्यवाद। –

उत्तर

9

जब आप c=c/2**63 करते हैं, cdtype=object लिए casted हो जाता है (यही समस्या है) है, जबकि dtype=float साथ b रहता है।

जब आप dtype=object सरणी को dtype=float पर जोड़ते हैं, तो परिणाम dtype=object सरणी है। इसे dtype प्राथमिकता के रूप में सोचें, जैसे कि एक numpy int में एक numpy float जोड़ने के दौरान एक numpy फ्लोट देता है।

आप जगह में floatको object जोड़ने का प्रयास करते हैं, तो यह विफल रहता है, के रूप में परिणाम object से float में ढाला नहीं जा सकता है। जब आप b=b+c जैसे बुनियादी परिवर्धन का उपयोग करते हैं, तो परिणाम b को dtype=object पर डाला गया है, जैसा कि आपने देखा होगा।

ध्यान दें कि c=c/2.**63 का उपयोग c को एक फ्लोट के रूप में रखता है और b+=c अपेक्षा के अनुसार काम करता है। ध्यान दें कि यदि cnp.ones(1) था तो आपको कोई समस्या नहीं होगी।

किसी भी तरह: (np.array([0], dtype=float)/2**63)).dtype == np.dtype(object) एक बग की संभावना है।

+0

मुझे यकीन नहीं है कि यह एक बग है। हो सकता है - लेकिन '2 ** 63'' int64' के अधिकतम मान से बड़ा है, इसलिए मुझे यकीन नहीं है कि यह पाइथन ऑब्जेक्ट्स की एक सरणी में स्टोर करने के अलावा 'numpy' के अलावा कुछ भी करने के लिए समझ में आता है। – senderle

+0

सिवाय इसके कि 'लोट' की तुलना में 'लम्बी' की प्राथमिकता कम है। –

+0

हाँ, और मैं ओपीएस समस्या को फिर भी उत्पन्न नहीं कर सकता। – senderle

संबंधित मुद्दे