2017-10-09 46 views
0

權力的數組我想:NumPy的創造的2

>>>a = np.array(2**np.arange(42)[::-1],dtype = np.uint64) 

,並得到

>>> a 
array([     0,     0,     0, 
          0,     0,     0, 
          0,     0,     0, 
          0, 18446744071562067968,   1073741824, 
        536870912,   268435456,   134217728, 
        67108864,    33554432,    16777216, 
        8388608,    4194304,    2097152, 
        1048576,    524288,    262144, 
        131072,    65536,    32768, 
         16384,     8192,     4096, 
         2048,     1024,     512, 
         256,     128,     64, 
         32,     16,     8, 
          4,     2,     1], dtype=uint64) 

18446744071562067968肯定不是2 to the power 31後,答案肯定不是零!
檢查某種溢出錯誤我想:

>>> a[0] = 2**42 

,並得到:

>>> a 
array([  4398046511104, ..... 

    the rest the same 

誰能告訴我出了什麼問題?

+0

你正在做的計算錯誤的D型和鑄造爲時已晚。 'float(1/2)'在Python 2中是'0.0','decimal.Decimal(1.0/10.0)'不是'decimal.Decimal('0.1')'。 – user2357112

回答

1

是的,np.arange(42)被默認爲一個符號整數,可能np.int32,可能是因爲你是在32位架構或者你是在Windows上。溝np.array包裝,這是完全無用的,而D型細胞傳遞到np.arange

2**np.arange(42, dtype = np.uint64)[::-1] 
+0

這工作,謝謝艾倫 –