删除二维矩阵的最后一列或一维向量的最后一个元素
我有一个函数:
remove_last(x):
如果 x
是一个一维向量,我想把它的最后一个元素去掉。有时候 x
可能是一个包含这种向量的矩阵,这种情况下我需要去掉最后一列。
使用示例:
aa = np.asarray([1,2,3])
print remove_last(aa)
#Output: [1 2]
bb = np.asarray([aa,2*aa,3*aa,4*aa])
print remove_last(aa)
#Output: [[1 2], [2 4], [3 6], [4 8]]
到目前为止,我有:
def remove_last(x):
assert(x.ndim<=2)
if x.ndim==1:
return x[:-1]
else:
return x[:,:-1]
这个方法可以用,但看起来不是很好。
应该有更好的方法,可以利用 numpy 的切片功能。
1 个回答
3
确实有这样的东西。你要找的是 ...
这个叫做省略号切片标记的东西。它的意思是“填入若干个 :
,直到切片的数量和数组的维度相匹配。”
这样一来,你的代码就变成了:
def remove_last(x):
return x[...,:-1]
看起来干净而且符合Python的风格。