numpy数组部分切片除以常量未得到浮点结果的原因及解决方法
问题原因
你初始化数组a = np.array([1,2,3])时,传入的所有元素都是整数,numpy会自动将数组的数据类型(dtype)设置为整型。
整型数组仅支持存储整数,当你把a[:2]/2计算得到的浮点结果[0.5, 1.0]赋值回整型数组的切片时,numpy会自动将浮点数截断为整数,因此0.5会被转为0,1.0保持为1,最终输出[0 1 3]。
解决方法
要得到浮点型的结果,你只需要保证数组本身是浮点型即可,常用的实现方式有以下几种:
- 初始化时直接指定浮点类型
import numpy as np # 指定dtype为浮点型 a = np.array([1,2,3], dtype=np.float64) a[:2] = a[:2]/2 print(a) # 输出:[0.5 1. 3. ]
- 对已创建的整型数组做类型转换
import numpy as np a = np.array([1,2,3]) # 转为浮点型数组 a = a.astype(np.float64) a[:2] = a[:2]/2 print(a) # 输出:[0.5 1. 3. ]
- 运算时处理(仅作参考)
如果不想修改原数组的全局类型,也可以拼接运算结果生成新的浮点数组:
import numpy as np a = np.array([1,2,3]) a = np.concatenate([a[:2]/2, a[2:]]) print(a) # 输出:[0.5 1. 3. ]
内容的提问来源于stack exchange,提问作者Yay
相关产品推荐
相关产品推荐

