Python中numpy.arange指定dtype为int时结果全为0的原因探究
为什么
np.arange(0.3, 12.5, 0.6, int)输出全是0? 嘿,这个坑我当初刚学NumPy的时候也踩过!原因其实是你误解了np.arange最后一个参数的作用——它不是用来把生成的浮点型数组转成整数的,而是直接指定整个数组的数据类型,并且在生成序列前就会把起始值、步长都强制转换成这个类型。
咱们拆解一下你写的代码:
当你调用np.arange(0.3, 12.5, 0.6, int)时,NumPy会先做这两步关键操作:
- 把起始值
0.3强制转换为int类型,结果直接变成0; - 把步长
0.6也强制转换为int类型,结果变成0;
这下问题就一目了然了:你相当于让NumPy生成一个从0开始,每次加0,直到不超过12.5的序列——那可不就是一堆0嘛!
正确的做法
如果你想把生成的浮点序列转换成整数数组,应该先生成原始的浮点数组,再用astype()方法转换类型:
import numpy as np x = np.arange(0.3, 12.5, 0.6).astype(int) # 输出会是 [0 0 1 2 2 3 3 4 5 5 6 6 7 8 8 9 9 10 11 11 12]
或者如果需要四舍五入而不是直接截断小数部分的话,可以用np.round()配合类型转换:
x = np.round(np.arange(0.3, 12.5, 0.6)).astype(int) # 输出会是 [0 1 2 2 3 3 4 4 5 6 6 7 8 8 9 9 10 11 11 12 12]
这样就能得到你预期的整数数组啦!
内容的提问来源于stack exchange,提问作者Developer
相关产品推荐
相关产品推荐

