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

时间:2014-07-02 04:25:35

标签: python numpy

我有一个功能:

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 个答案:

答案 0 :(得分:3)

有。 您要找的是... ellipsis slicing marker. 它说&#34;填写一些:,直到切片说明符的数量与数组的维度匹配。&#34;

随着你的代码变成:

def remove_last(x):
    return x[...,:-1]

清洁和pythonic。