我想将一个 numpy 数组从int32类型转换为int16类型。
我有一个int32
名为的数组array_int32
,我将其转换为int16
.
import numpy as np
array_int32 = np.array([31784960, 69074944, 165871616])`
array_int16 = array_int32.astype(np.int16)
转换后,array_int16
变成一个零数组。我不知道我在做什么错误。有人可以帮我吗?
我想将一个 numpy 数组从int32类型转换为int16类型。
我有一个int32
名为的数组array_int32
,我将其转换为int16
.
import numpy as np
array_int32 = np.array([31784960, 69074944, 165871616])`
array_int16 = array_int32.astype(np.int16)
转换后,array_int16
变成一个零数组。我不知道我在做什么错误。有人可以帮我吗?
您可以丢弃底部的 16 位:
n=(array_int32>>16).astype(np.int16)
这会给你这个:
array([ 485, 1054, 2531], dtype=int16
您的数字array_int32
太大,无法用 16 位表示(16 位的有符号整数值只能表示最大值 2^16-1=32767)。显然,在这种情况下,numpy 只是将结果数字设置为零。
可以通过更改文档状态的可选casting
参数来修改此行为astype
从 NumPy 1.9 开始,如果要转换的字符串 dtype 在“安全”转换模式下不足以容纳正在转换的整数/浮点数组的最大值,则 astype 方法现在返回错误。即使结果被截断,以前也允许强制转换。
因此,额外的要求casting='safe'
将导致 a TypeError
,因为从 32(或 64)位转换为 16,因为原始类型的最大值对于新类型来说太大了,例如
import numpy as np
array_int32 = np.array([31784960, 69074944, 165871616])
array_int16 = array_int32.astype(np.int16, casting='safe')
结果是
TypeError: Cannot cast array from dtype('int64') to dtype('int16') according to the rule 'safe'