首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Numpy:戳,溢出到底是什么?

Numpy:戳,溢出到底是什么?
EN

Stack Overflow用户
提问于 2019-03-07 18:10:54
回答 1查看 344关注 0票数 0

我正在阅读以下Python文档:

https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.prod.html

备注 当使用整数类型时,算法是模块化的,溢出不会引起错误。这意味着,在32位平台上:X= np.array(536870910,536870910,536870910,536870910) >>> np.prod(x) #随机16

有人能解释一下在使用整数类型时算术是什么意思吗?如果我有一个32位或64位平台,这与此有什么关系呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-07 21:05:36

wiki页面解释了模块化算法,但与numpy无关。

可以用8、16、32或64位对numpy ints进行签名或取消签名。

代码语言:javascript
复制
         Range signed        Range unsigned
 8 bit   -128 to 127         0 to 255        0 to 2**8-1
16 bit   -32768 to 32767     0 to 65535      0 to 2**16-1
32 bit   -2**31 to 2**31-1   0 to 2**32-1    Decimal 9 digits
64 bit   -2**64 to 2**64-1   0 to 2**64-1    Decimal 18/19 digits

对于np.int8来说,这是最容易想象的。只有256个不同的可能值。

代码语言:javascript
复制
import numpy as np
a=np.arange(256, dtype=np.int8)
print(a)

[   0    1    2    3    4    5    6    7    8    9   10   11   12   13   14
   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29
   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44
   45   46   47   48   49   50   51   52   53   54   55   56   57   58   59
   60   61   62   63   64   65   66   67   68   69   70   71   72   73   74
   75   76   77   78   79   80   81   82   83   84   85   86   87   88   89
   90   91   92   93   94   95   96   97   98   99  100  101  102  103  104
  105  106  107  108  109  110  111  112  113  114  115  116  117  118  119
  120  121  122  123  124  125  126  127 -128 -127 -126 -125 -124 -123 -122
 -121 -120 -119 -118 -117 -116 -115 -114 -113 -112 -111 -110 -109 -108 -107
 -106 -105 -104 -103 -102 -101 -100  -99  -98  -97  -96  -95  -94  -93  -92
  -91  -90  -89  -88  -87  -86  -85  -84  -83  -82  -81  -80  -79  -78  -77
  -76  -75  -74  -73  -72  -71  -70  -69  -68  -67  -66  -65  -64  -63  -62
  -61  -60  -59  -58  -57  -56  -55  -54  -53  -52  -51  -50  -49  -48  -47
  -46  -45  -44  -43  -42  -41  -40  -39  -38  -37  -36  -35  -34  -33  -32
  -31  -30  -29  -28  -27  -26  -25  -24  -23  -22  -21  -20  -19  -18  -17
  -16  -15  -14  -13  -12  -11  -10   -9   -8   -7  -6  -5  -4  -3  -2 -1]

由8位> 127位表示的数字显示为负数。

代码语言:javascript
复制
np.binary_repr(127, 8)
Out[11]: '01111111'

np.binary_repr(-128, 8)
Out[12]: '10000000'

如果设置了位7,则指示为负整数。

使用np.int8来玩一些数字。

代码语言:javascript
复制
np.int8(17*18)   # Out[29]: 50
17*18 % 256      # Out[30]: 50  (17*18=306) Mod 256 = 50

np.int8(17*180) # Out[31]: -12
17*180 % 256    # Out[32]: 244  
np.binary_repr(244, 8)   # Out[33]: '11110100'
np.binary_repr(-12, 8)   # Out[34]: '11110100'

文档是说,如果整数算术溢出,它只是包装在数字范围内,它不会引发异常。将“包装”替换为模块化。

如果确实发生溢出,则只会产生令人惊讶(而且可能是不正确)的结果。

这给出了一个快速的大纲。使用np.int8(expr)np.binary_repr( n, 8)来玩,看看发生了什么。

编辑以解释第7位

代码语言:javascript
复制
Bit numbers  7 6 5 4 3 2 1 0
     127     0 1 1 1 1 1 1 1  Bit 7 not set 0 +127
    -128     1 0 0 0 0 0 0 0  Bit 7 set     1 -128
      -1     1 1 1 1 1 1 1 1  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55050280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档