删除二维矩阵的最后一列或一维向量的最后一个元素

0 投票
1 回答
2897 浏览
提问于 2025-04-18 11:49

我有一个函数:

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的风格。

撰写回答