如何使用np.delete删除三维Numpy数组中的指定列?
解决Numpy三维数组删除指定列的问题
首先,咱们先明确你的数组维度:你的array是一个**(2, 2, 2)**的三维数组,结构可以拆解为:
- 最外层(axis=0):2个二维数组块
- 每个块内部(axis=1):2行
- 每行内部(axis=2):2列
你想要删除的是每个二维数组里的第1列(对应索引1的列),但之前用axis=1是错误的——因为axis=1对应的是「行维度」,所以你删除的是每个块里的第1行,才会得到[[[1 2]] [[0 5]]]这样的结果。
两种正确的实现方式
方式1:直接索引(最直观高效)
Numpy的数组索引比np.delete更直接,如果你想保留第0列(也就是删除第1列),直接指定第三个维度的索引即可:
import numpy as np array = np.array([[[1,2],[3,4]],[[0,5],[6,7]]]) # 保留第0列,保持三维结构 result = array[:,:,0:1] # 或者 array[:,:,[0]] print(result)
输出结果:
[[[1] [3]] [[0] [6]]]
这里[:,:,0:1]的意思是:取所有外层块、所有行、第0列(用切片0:1而不是直接0,是为了保持三维结构,避免降维成二维数组)。
方式2:用np.delete(指定正确的axis)
如果一定要用np.delete,需要指定axis=2(列维度),并删除索引为1的元素:
result = np.delete(array, 1, axis=2) print(result)
同样会得到你期望的结果。
关于np.s_的补充说明
np.s_是用来生成切片对象的,方便快速写出复杂的索引/切片规则。比如np.s_[::2]确实是取间隔为2的元素(也就是奇数位置),但如果只是删除单个列,直接传索引值(比如1)就足够了。如果需要删除多个不连续的列,比如同时删除第0和第1列(当然你的例子里只有两列),才需要用到np.s_,比如np.delete(array, np.s_[0,1], axis=2)。
内容的提问来源于stack exchange,提问作者Sebastian N
相关产品推荐
相关产品推荐

