Numpy的dtype转换算法



当您将数组从浮点型 dtype 转换为整数 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 的比例因子的?

感谢您的帮助。

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

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

127

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

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

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

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

0b01111111 = 127

最新更新