Python分割数据数组时报slice indices must be integers错误如何解决
报错原因
Python(包括numpy等常用数据处理库)要求切片的索引必须为整数类型、None或者实现了__index__方法的对象。你计算得到的x虽然数值为90,但除法运算/在Python3中默认返回浮点数类型,也就是x的实际类型是float,值为90.0,不符合切片索引的整数类型要求,因此触发报错。
解决方案
可以通过以下任意一种方式处理:
- 直接将计算结果强制转换为整数
注意该方式会直接截断浮点数的小数部分,若计算结果存在浮点精度误差(例如本应为90的结果被计算为split_ratio=[3,1,1] x=int(split_ratio[0]/sum(split_ratio)*data.shape[0]) print(x) print(data[0:x,:])89.99999999999999),强制转换会得到89。 - 使用四舍五入获取整型索引,避免浮点精度误差影响
split_ratio=[3,1,1] x=round(split_ratio[0]/sum(split_ratio)*data.shape[0]) print(x) print(data[0:x,:]) - 若有向下取整/向上取整的业务需求,可使用
math.floor或math.ceil处理后再转整型import math split_ratio=[3,1,1] # 向下取整 x=math.floor(split_ratio[0]/sum(split_ratio)*data.shape[0]) # 向上取整 # x=math.ceil(split_ratio[0]/sum(split_ratio)*data.shape[0]) print(x) print(data[0:x,:])
内容的提问来源于stack exchange,提问作者mesut_comak
相关产品推荐
相关产品推荐

