我想将一个 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)
Run Code Online (Sandbox Code Playgroud)
转换后,将array_int16变成零数组。我不知道我在做什么错误。有人可以帮助我吗?
您可以丢弃底部 16 位:
n=(array_int32>>16).astype(np.int16)
Run Code Online (Sandbox Code Playgroud)
这会给你这个:
array([ 485, 1054, 2531], dtype=int16
Run Code Online (Sandbox Code Playgroud)
您中的数字array_int32太大,无法用 16 位表示(16 位的有符号整数值只能表示最大值 2^16-1=32767)。\n显然,numpy 只是在此将结果数字设置为零案件。
可以通过更改文档casting的可选参数来修改此行为astype状态
\n\n\n从 NumPy 1.9 开始,如果要转换为的字符串 dtype 在 \xe2\x80\x98safe\xe2\x80\x99 转换模式中不够长,无法保存正在转换的整数/浮点数组的最大值,则 astype 方法现在会返回错误铸造。以前,即使结果被截断,也允许进行强制转换。
\n
因此,额外的要求casting=\'safe\'将导致 a TypeError,因为从 32(或 64)位转换为 16,因为原始类型的最大值对于新类型来说太大,例如
import numpy as np\narray_int32 = np.array([31784960, 69074944, 165871616])\narray_int16 = array_int32.astype(np.int16, casting=\'safe\')\nRun Code Online (Sandbox Code Playgroud)\n\n结果是
\n\nTypeError: Cannot cast array from dtype(\'int64\') to dtype(\'int16\') according to the rule \'safe\'
| 归档时间: |
|
| 查看次数: |
8533 次 |
| 最近记录: |