2017-10-09 4 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

。同様の理由で、 'float(1/2)'はPython 2では '0.0 'であり、' decimal.Decimal(1.0/10.0) 'は' decimal.Decimal(' 0.1 ') 'ではありません。 – user2357112

答えて

1

はい、np.arange(42)あなたは32ビットアーキテクチャ上にあるか、あなたがWindows上であるためか、そうnp.int32符号付き整数をデフォルトされます。全く役に立たないnp.arrayラッパーを、溝、およびnp.arangeにDTYPEを渡す:あなたは間違っDTYPEで計算を行うと、手遅れにキャストしている

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

これは、ありがとうアラン –

関連する問題