【问题标题】:Numpy's dtype conversion algorithmNumpy 的 dtype 转换算法
【发布时间】:2013-10-24 17:26:27
【问题描述】:

当您将数组从 float dtype 转换为 integer dtype 时,如果数组的最大值高于整数类型可以容纳的值,numpy 如何缩放值?

In [9]: data_array.dtype
Out[9]: dtype('<f4')

In [11]: data_array.max()
Out[11]: 32767.0

In [16]: test = np.asarray(data_array, dtype=np.int8)

In [17]: test.max()
Out[17]: 127

In [18]: data_array.max()/test.max()
Out[18]: 258.00787

numpy 是如何达到 258 的比例因子的?

感谢您的帮助。

【问题讨论】:

    标签: python numpy type-conversion


    【解决方案1】:

    它们不是数组的同一个元素。

    Numpy 通过转换为 int 然后截断二进制表示,将浮点类型转换为整数类型,因此 32767.0 将转换为整数 32767 (0x7fff),然后再转换为 0xff,即 int8 中的 -1。

    127 来自另一个数组元素,其整数值等于 127 模 256。

    【讨论】:

    • 是的,当我测试它时,我发现我也得到了 32767 的 -1,但我只是把它排除在我的答案之外......(+1 用于澄清)
    • “转换为int然后截断”是什么意思?这是一个错字,应该是模数吗?
    • @BiRico 二进制表示在左边被截断,相当于模运算。
    【解决方案2】:

    它不是一个比例......它只是使用 8 位作为有符号整数......

    32767 & 0b11111111 = 0b11111111 = 255(无符号)

    int 8 是有符号的,所以它只有 7 位,第 8 位是符号位

    0b01111111 = 127

    【讨论】:

      猜你喜欢
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多