元素为numpy.ndarray的Python列表执行删除操作报错如何解决?
错误解决:无法删除numpy数组元素
报错根因
numpy.ndarray是固定大小的静态数组,不支持Python原生del关键字直接删除内部元素。你外层的trainSet确实是列表,但循环遍历拿到的每个row本身是numpy数组类型,对numpy数组执行del row[1]操作就会触发该错误。
可行解决方案
你可以通过以下两种方案实现删除每个数组的第二列(索引为1的列):
- 方案1:使用numpy官方提供的
delete方法生成新数组,替换列表中原有的数组元素
import numpy as np # 遍历列表索引,直接替换对应位置的元素 for idx in range(len(trainSet)): # 若每个row是二维数组(多列),指定axis=1代表按列删除 trainSet[idx] = np.delete(trainSet[idx], 1, axis=1) # 若每个row是一维数组,删除指定位置元素不需要加axis参数,写法如下: # trainSet[idx] = np.delete(trainSet[idx], 1)
- 方案2:使用切片筛选保留需要的列,性能优于
delete方法
for idx in range(len(trainSet)): # 二维数组场景:保留除索引1之外的所有列 trainSet[idx] = trainSet[idx][:, [i for i in range(trainSet[idx].shape[1]) if i != 1]] # 一维数组场景:保留除索引1之外的所有元素 # trainSet[idx] = trainSet[idx][[i for i in range(len(trainSet[idx])) if i != 1]]
两种方案都会生成新的numpy数组替换列表中原来的元素,不需要修改外层列表的结构,符合你的使用场景
内容的提问来源于stack exchange,提问作者imdatyaa
相关产品推荐
相关产品推荐

