跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Python 中的 numpy 定义 dtype 为 short 以后为什么赋值 32768 的值是-32768 ?
未分類
27 3 月 2020

Python 中的 numpy 定义 dtype 为 short 以后为什么赋值 32768 的值是-32768 ?

Python 中的 numpy 定义 dtype 为 short 以后为什么赋值 32768 的值是-32768 ?

資深大佬 : SystemLight 9

a = np.array([1, 2, 3, 4, 5, 6, 32768]) a.dtype = np.short print(a)

输出: [ 1 0 2 0 3 0 4 0 5 0 6 0 -32768 0]

输出的结果为什么分成了两个值了呢?

大佬有話說 (7)

  • 資深大佬 : minami

    呃,这是被转型了吧,没发现数组长度都不对了吗?你要初始化时就指定 dtype,不要这样强转

  • 資深大佬 : junkun

    short 补码的表示范围就是-32768~32767,没办法表示 32768 。

  • 主 資深大佬 : SystemLight

    @junkun 是的是的,明白了

    @minami 还真是,感谢启发,我输出值以后从 np.short 类型转成了 python int 类型,所以最高位变了,符号位置也就变了

    python_val = -32769

    print(bin(python_val)) # 符号位+中间数字+已有的 16 位数字位 -0b1000000000000001 存成补码 1…1…0111111111111111

    print(python_val)

    numpy_short_val = np.short(python_val) # numpy 得到以后把只取 16 位,发现最高位是 0 为正数,正数原码=补码 0111111111111111

    print(bin(numpy_short_val)) # 当 python 再读取出来时:0111111111111111 就是 32767

    print(numpy_short_val)

  • 資深大佬 : byaiu

    其实 dtype 是可以强转的,在数据很大的时候是很有必要的。

  • 主 資深大佬 : SystemLight

    @byaiu 但是我这样转换,数组大小却变了

  • 資深大佬 : byaiu

    @SystemLight 说明原始的类型不是 short 而是 int 。
    我以前是有处理十多个 G 数据的需求,数据可以直接用 np.fromfile 从文件里直接获取,同时要指定 dtype 。然后改变 dtype 来按照不同的格式观察同一数据。

  • 資深大佬 : enrio

    钓,就硬钓。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具