Numpy.delete()无法正确删除指定索引元素的原因及解决方案
1.
delete()函数未生效的原因 - 核心原因是NumPy的
np.delete()属于非原地修改函数:它和Python原生列表的.remove()、.sort()这类直接修改原对象的方法逻辑不同,NumPy绝大多数元素增删、维度变换操作都不会改动传入的原始数组,所有计算结果会封装在全新的数组对象中返回。你的代码仅调用了函数、没有接收返回值,原始数组m自然不会发生任何变化。 - 额外的易踩坑点:即使你正确接收了返回值,如果不指定
axis参数,np.delete()会默认先将二维数组展平为一维数组再执行删除,最终得到的是一维结果[1 1],同样不符合你删除整行的预期。
2. 不转换为Python列表的解决方法
你只需要做两处调整即可得到预期结果:
- 用原变量(或新变量)接收
np.delete()返回的新数组对象 - 传入
axis=0参数,指定沿着行维度执行删除(对应删除索引为2的整行)
修正后的可运行代码:
import numpy as np m = np.array([[1], [1], [3]]) m = np.delete(m, 2, axis=0) print(m)
运行上述代码,输出结果就是你预期的[[1] [1]]。
补充说明:如果后续需要删除指定列,只需要将axis参数设置为1,同时传入要删除的列索引即可。
内容的提问来源于stack exchange,提问作者Cardstdani
相关产品推荐
相关产品推荐

