4

当您将数组从 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 的比例因子的?

谢谢您的帮助。

4

2 回答 2

3

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

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

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

于 2013-10-24T17:37:13.877 回答
2

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

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

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

0b01111111 = 127

于 2013-10-24T17:32:10.160 回答