Python删除字典中数组指定索引元素报ValueError的解决方法
报错原因
你写del clusters[1][150]触发报错,是因为字典clusters里每个键存的值是NumPy的ndarray数组,不是Python原生列表。ndarray是固定内存大小的结构,本身就不支持像原生列表那样用del直接按索引删元素——所有对ndarray的删除操作,本质都是生成一个排除了目标索引的新数组,再替换掉原来的旧值。
clusters的字典结构参考下图:
正确删除操作
用NumPy自带的np.delete方法生成剔除目标元素的新数组,再赋值回字典对应的键就行。比如你要删除键6对应数组里索引为150的元素(因为数组形状是(n,6),这里的单个元素指的是一整行长度为6的向量),代码如下:
import numpy as np # 要操作的字典键、要删除的行索引 target_key = 6 del_idx = 150 # axis=0 表示按第一维度(行方向)删除,匹配数组(n,6)的n所在维度 clusters[target_key] = np.delete(clusters[target_key], del_idx, axis=0)
其他使用提示
- 要删其他键对应数组的元素,直接改
target_key的值就行,比如要操作键1的数组就把值设为1,del_idx换成对应要删的行索引。 - 要一次性删同一个数组里的多个索引元素,直接把索引拼成列表传给
np.delete的第二个参数即可,比如要删150、203、412三行,就写np.delete(clusters[target_key], [150, 203, 412], axis=0)。 - 别把数组转成原生列表删完再转回来,数据量一大,这种写法的性能比直接用
np.delete差很多。
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

