2012-02-04 17 views
11

मैं निम्नलिखित कोड है:Numpy त्रुटि: अमान्य मान सत्ता में आई

D:\Work\programming\python\test_1\src\test1_numpy.py:6: RuntimeWarning: invalid value encountered in power b = numpy.arange(n) ** 3

ध्यान दें कि निम्नलिखित numpyless समारोह ठीक काम करता है:

import numpy 

def numpysum(n): 
    a = numpy.arange(n) ** 2 
    b = numpy.arange(n) ** 3 
    c = a + b 
    return c 


size = 3000 
c = numpysum(size) 

जब चल रहा है, मैं त्रुटि मिलती है

def pythonsum(n): 
    a = list(range(n)) 
    b = list(range(n)) 
    c = [] 
    for i in range(len(a)): 
     a[i] = i ** 2 
     b[i] = i ** 3 
     c.append(a[i] + b[i]) 
    return c 

मुझे लगता है कि ऐसा होता है क्योंकि मैं तीन शक्तियों को बड़ी संख्या में बढ़ाने की कोशिश करता हूं। फ्लोटिंग पॉइंट नंबरों के साथ काम करने के अलावा मैं क्या कर सकता हूं?

मैं पायथन 3.2 के साथ काम कर रहा हूं।

+0

: कोड चलाता fine.Maybe आप और sth कि त्रुटि का कारण बनता है क्या किया? – George

+1

क्या यह आपके सिस्टम पर 'आकार = 1000' के साथ चलाएगा? फिर यह एक डेटा प्रकार मुद्दा है - 'arange()' में 'dtype' पैरामीटर सेट करने पर विचार करें। – krlmlr

उत्तर

16

numpy वास्तव में इस पर आपके लिए देख रहा है। मानक पायथन में अनलेक करें, इसके पूर्णांक संचालन मनमानी-परिशुद्धता वस्तुओं पर काम नहीं करते हैं। मुझे लगता है कि चाहते हैं आप एक 32-बिट अजगर चल रहे थे, क्योंकि एक ही आपरेशन मेरे लिए अतिप्रवाह नहीं है:

>>> sys.maxsize 
9223372036854775807 
>>> size = 3000 
>>> c = numpysum(size) 
>>> 

लेकिन वे अंततः होगा। और भी आसान है अगर तुम प्रकार मैन्युअल के आकार को नियंत्रित देखने के लिए:

>>> numpy.arange(10, dtype=numpy.int8)**10 
__main__:1: RuntimeWarning: invalid value encountered in power 
array([ 0, 1, 0, -87, 0, -7, 0, -15, 0, 0], dtype=int8) 
>>> numpy.arange(10, dtype=numpy.int16)**10 
array([  0,  1, 1024, -6487,  0, 761, -23552, 15089, 
      0,  0], dtype=int16) 
>>> numpy.arange(10, dtype=numpy.int32)**10 
array([   0,   1,  1024,  59049,  1048576, 
      9765625, 60466176, 282475249, 1073741824, -2147483648], dtype=int32) 
>>> numpy.arange(10, dtype=numpy.int64)**10 
array([   0,   1,  1024,  59049, 1048576, 
      9765625, 60466176, 282475249, 1073741824, 3486784401]) 

जहां चीजें बिट्स की संख्या बढ़ जाती के रूप में सुधार होगा। क्या तुम सच में अजगर मनमाने ढंग से आकार पूर्णांकों पर numpy सरणी संचालन चाहते हैं, आप सेट कर सकते हैं dtype आपत्ति उठाने:

>>> numpy.arange(10, dtype=object)**20 
array([0, 1, 1048576, 3486784401, 1099511627776, 95367431640625, 
     3656158440062976, 79792266297612001, 1152921504606846976, 
     12157665459056928801], dtype=object) 
+1

धन्यवाद। वास्तव में, यह पाइथन 32 बिट है। – lmsasu

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