NumPy的数据类型转换算法

4
当您将一个浮点数数组转换为整数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的缩放因子的?

谢谢您的帮助。

2个回答

3

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

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

127来自另一个数组元素,其整数值在模256下与127同余。


是的,当我测试它时,我发现对于32767我得到了-1,但我只是把它留在了我的答案之外...(+1为澄清) - Joran Beasley
“将其转换为整数然后截断”是什么意思?这是打字错误吗?应该是取模吗? - Bi Rico
@BiRico 二进制表示在左侧被截断,这相当于模运算。 - ecatmur

2

这不是一个比例尺...只是将8个位用于有符号整数...

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

int 8是有符号的,因此它只能获得7位,第8位是符号位

0b01111111 = 127


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接