Answer:制作一个元组slice https://docs.python.org/3/library/functions.html#slice对象可以解决这个问题:
a[(slice(1,None),) * len(a.shape)]
解释:
slice
是一个内置的 python 类(不依赖于 numpy 或 pytorch),它提供了用于描述切片的下标表示法的替代方法。答案 https://stackoverflow.com/a/12616901/3780389 to 另一个问题 https://stackoverflow.com/q/12616821/3780389建议使用它作为在 python 变量中存储切片信息的方式。这蟒蛇术语表 https://docs.python.org/3/glossary.html#term-slice指出
括号(下标)表示法使用slice https://docs.python.org/3/library/functions.html#slice内部对象。
自从__getitem__
方法用于numpy ndarrays https://docs.scipy.org/doc/numpy/user/basics.indexing.html and 火炬张量 https://pytorch.org/docs/stable/tensors.html#torch.Tensor支持切片的多维索引,它们也必须支持切片对象的多维索引,因此我们可以将这些切片创建一个具有正确长度的元组。
顺便说一句,您可以通过创建一个虚拟类来了解 python 如何使用切片对象,如下所示,然后对其进行切片:
class A(object):
def __getitem__(self, ix):
return ix
print(A()[5]) # 5
print(A()[1:]) # slice(1, None, None)
print(A()[1:,1:]) # (slice(1, None, None), slice(1, None, None))
print(A()[1:,slice(1,None)]) # (slice(1, None, None), slice(1, None, None))