为什么移动numpy uint8会产生负值?

jspencer

我在Windows上使用python 2.7,numpy 1.6.1、32位。我正在编写一个函数,将一些数据打包为32位整数,并从常量值生成C源声明。这样做时,我发现numpy的uint8类型有些奇怪的行为。

我敢肯定,没有人会惊讶于此:

>>> n = 0x94 << 24
>>> n
2483027968L
>>> hex(n)
'0x94000000L'

但是用numpy uint8进行同样的操作,您会得到一些令我惊讶的东西:

>>> n = np.uint8(0x94) << 24
>>> n
-1811939328
>>> hex(n)
'-0x6c000000'

有人会认为,显式无符号的类型返回负值的可能性甚至更低。

请注意,带符号位清除的值按预期工作:

>>> n = np.uint8(0x74) << 24
>>> n; hex(n)
1946157056
'0x74000000'

我碰巧注意到numpy似乎正在将无符号类型提升为有符号类型:

>>> n = np.uint8(0x74) << 24
>>> type(n)
<type 'numpy.int32'>

这似乎是一个明显的错误。我找不到对这种已知错误的引用,但是...是吗?

名称

numpy似乎将右手参数(24)视为原始宽度的有符号整数(int32在您的情况下,int64在我的情况下)。

看起来将uint8gets提升为相同类型,并且移位的结果也为相同类型:

>>> np.uint8(0x94) << 56
-7782220156096217088
>>> type(np.uint8(0x94) << 56)
<type 'numpy.int64'>

将右手参数设置为无符号int可得到您期望的结果:

>>> np.uint8(0x94) << np.uint(56)
10664523917613334528
>>> type(np.uint8(0x94) << np.uint(56))
<type 'numpy.uint64'>
>>> hex(np.uint8(0x94) << np.uint(56))
'0x9400000000000000L'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么移动numpy uint8会产生负值?

来自分类Dev

为什么fftfreq产生负值?

来自分类Dev

为什么静态元素会移动?

来自分类Dev

为什么MATLAB uint8值和uint16值不同

来自分类Dev

使用python将numpy数组转换为uint8

来自分类Dev

为什么在Opencv python包装器中数据类型必须为'uint8'?

来自分类Dev

为什么我必须将“ uint8”转换为“ float32”

来自分类Dev

将“ uint8 RGB像素”转换为“ uint8灰度像素”值的公式是什么?

来自分类Dev

为什么删除的移动语义会导致std :: vector问题?

来自分类Dev

悬停在图像上时为什么图像会移动

来自分类Dev

为什么在移动版本中弹性商品会溢出容器?

来自分类Dev

为什么这段文字会移动我的div?

来自分类Dev

保存无花果时,图例为什么会移动?

来自分类Dev

为什么我的鼠标指针会自己移动?

来自分类Dev

为什么在引发“布局停止”事件后节点会移动?

来自分类Dev

为什么这段文字会移动我的div?

来自分类Dev

为什么我的评论会向下移动页面?

来自分类Dev

对于与NaN的成对关联,为什么Pandas和Numpy会产生不同的结果?

来自分类Dev

为什么 python numpy std() 会产生不需要的空格?

来自分类Dev

播放器向右或向左移动时,为什么平台会移动

来自分类Dev

为什么将我的游戏对象移动限制在摄像机框架内会阻止移动?

来自分类Dev

为什么TZ = UTC-8会产生UTC + 8的日期?

来自分类Dev

为什么用1和UINT_MAX作为种子,rand()会产生相同的值?

来自分类Dev

为什么此代码会产生InvalidMemoryOperationError?

来自分类Dev

为什么此代码会产生错误?

来自分类Dev

为什么会产生值限制异常?

来自分类Dev

为什么此代码会产生错误?

来自分类Dev

为什么此代码会产生IndexOutOfBoundsException?

来自分类Dev

为什么0%0会产生1?

Related 相关文章

  1. 1

    为什么移动numpy uint8会产生负值?

  2. 2

    为什么fftfreq产生负值?

  3. 3

    为什么静态元素会移动?

  4. 4

    为什么MATLAB uint8值和uint16值不同

  5. 5

    使用python将numpy数组转换为uint8

  6. 6

    为什么在Opencv python包装器中数据类型必须为'uint8'?

  7. 7

    为什么我必须将“ uint8”转换为“ float32”

  8. 8

    将“ uint8 RGB像素”转换为“ uint8灰度像素”值的公式是什么?

  9. 9

    为什么删除的移动语义会导致std :: vector问题?

  10. 10

    悬停在图像上时为什么图像会移动

  11. 11

    为什么在移动版本中弹性商品会溢出容器?

  12. 12

    为什么这段文字会移动我的div?

  13. 13

    保存无花果时,图例为什么会移动?

  14. 14

    为什么我的鼠标指针会自己移动?

  15. 15

    为什么在引发“布局停止”事件后节点会移动?

  16. 16

    为什么这段文字会移动我的div?

  17. 17

    为什么我的评论会向下移动页面?

  18. 18

    对于与NaN的成对关联,为什么Pandas和Numpy会产生不同的结果?

  19. 19

    为什么 python numpy std() 会产生不需要的空格?

  20. 20

    播放器向右或向左移动时,为什么平台会移动

  21. 21

    为什么将我的游戏对象移动限制在摄像机框架内会阻止移动?

  22. 22

    为什么TZ = UTC-8会产生UTC + 8的日期?

  23. 23

    为什么用1和UINT_MAX作为种子,rand()会产生相同的值?

  24. 24

    为什么此代码会产生InvalidMemoryOperationError?

  25. 25

    为什么此代码会产生错误?

  26. 26

    为什么会产生值限制异常?

  27. 27

    为什么此代码会产生错误?

  28. 28

    为什么此代码会产生IndexOutOfBoundsException?

  29. 29

    为什么0%0会产生1?

热门标签

归档